首页 文章

从另一个表单访问字符串

提问于
浏览
0

你好,我在form1中有datagridview,通过form1我打开form2,通过form2我打开form3,放在Form1中的 string named vyber_ID_K 需要在Form3中访问(我需要在Form3中获取它的值)

这是在form1中单击按钮

form2 a = new form2 ("Novy");
        string vyber_IDK = (string)dataGridView1.CurrentRow.Cells["ID_K"].Value.ToString();
        a.vyber_ID_K = vyber_IDK;
        a.Show();
        a.Closed += klient_Closed;

我想访问 vyber_ID_K in form 3 ,怎么做?我试着设置 public string vyber_ID_K in form2 and pass it similary to form3 but I get null . 我做得对吗?还有其他更好的解决方案吗?

提前致谢 .

我按照Servy的说法一步一步:

单击表单1中的

  • 按钮

Func vyberIDKGetter =()=> dataGridView1.CurrentRow.Cells [“ID_K”] . Value.ToString();

try
    {
    form2 = new form2 ("Novy");

    a.vyberIDKGetter = () => dataGridView1.CurrentRow.Cells["ID_K"].Value.ToString();
    a.Show();

}

  • 按钮单击form2

public Func vyberIDKGetter; private void button1_Click(object sender,EventArgs e){nova_platba b = new nova_platba(“novy”); b.vyberIDKGetter(); b.Show(); b.Closed = klient_Closed; }

  • 在form3中
Func<string> vyberIDKGetter = veberIDK;


   string vyberIDK = vyberIDKGetter();
         SqlCommand sc = new SqlCommand(@"
            INSERT INTO kliplat (datum,text,castka,akce,subkey,priznak,rocnik) 
            VALUES (@datum,@text,@castka,@akce,@subkey,@priznak,@rocnik);
            SELECT scope_identity();
            ", spojeni);


     sc.Parameters.AddWithValue("@subkey", vyberIDK);

3 回答

  • 0

    所以这里的问题是你想要的值不会构造 Form2 ,甚至 Form3 . 它需要有一些方法可以在将来的某个时间访问数据 . 我们可以通过利用代表来获得这种行为 .

    而不是传递 stringForm2 ,当构造该形式时(因为我们不知道该字符串将是什么)传递 Func<string> . 该对象将是一种方法,在调用时,将提供表示所需值的字符串 . Form1 可以像这样定义:

    Func<string> vyberIDKGetter = 
        () => dataGridView1.CurrentRow.Cells["ID_K"].Value.ToString();
    

    然后在 Form3 中,当它保持传递的函数时,它可以通过简单地调用该委托来获取字符串:

    Func<string> vyberIDKGetter = [...];
    string vyberIDK = vyberIDKGetter();
    

    这种解决问题的方法特别具有冒险性,因为 Form3 不需要了解 Form1Form2 . 如果有其他调用者想要使用它,他们可以提供自己的代理 . 如果有一个开发人员处理每个表单的编码,他们不需要将每个表单的所有内部细节彼此通信,他们可以只处理该委托的传递,然后能够将调用者/被调用者视为黑匣子 .

  • 0

    你必须围绕字符串创建一个公共getter / setter:

    public string Vyber_ID_K 
    get
    {
        return vyber_ID_K;
    }
    set
    {
        vyber_ID_K  = value
    }
    

    您需要表格2中的表格1和表格3中的表格2的参考 . 因此,您可以访问每个表格 .

    你不能使用字符串作为引用参数,因为它是一个不可变的类 . String C#

  • 0

    通过构造函数传递参数真的很奇怪

    form2 a = new form2 ("Novy");
    

    并在同一时间通过属性传递另一个参数

    a.vyber_ID_K = vyber_IDK;
    

    你为什么不通过构造函数传递所有参数?

    string vyber_IDK = (string)dataGridView1.CurrentRow.Cells["ID_K"].Value.ToString();
    form2 a = new form2 ("Novy", vyber_IDK);
    

    并在Form2中

    public class form2 
    {
      private string Name { get; set; }
      private int vyber_IDK { get; set; }
    
      public form2( string Name, int vyber )
      {
         this.Name = Name;
         this.vyber_IDK = vyber_IDK;
      }
    

    然后,从 form2 传递任何东西到 form3 以相同的方式工作

    form3 f = new form3( this.vyber_IDK );
    

相关问题