c# - 从另一个表单访问字符串

标签 c# winforms

您好,我在form1中有datagridview,通过form1我打开form2,通过form2我打开form3和string named vyber_ID_K放置在Form1中需要在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. 单击表单 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();
    

    }

  2. 单击form2中的按钮

    公共(public)功能 vyberIDKGetter; 私有(private)无效button1_Click(对象发送者,EventArgs e) { nova_platba b = new nova_platba("novy"); b.vyberIDKGetter(); b.显示(); b.Closed += kclient_Closed; }

  3. 在表单3中

    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);
    

最佳答案

所以这里的问题是,当您构建 Form2 时,您想要的值还不存在。 ,甚至Form3对于这个问题。它需要有某种方式在将来的某个时刻访问数据。我们可以通过利用委托(delegate)来实现这种行为。

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

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

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

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

这种解决问题的方法特别具有冒险性,因为 Form3不需要了解任何关于Form1的信息或Form2 。如果有其他调用者想要使用它,他们可以提供自己的委托(delegate)。如果有开发人员处理每个表单的编码,他们不需要相互传达每个表单的所有内部细节,他们只需处理此委托(delegate)的传递,然后能够将调用者/被调用者视为一个黑匣子。

关于c# - 从另一个表单访问字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18451258/

相关文章:

c# - 用户选择时如何在文本框中显示目录路径?

c# - 在 c# winforms 程序中跟踪程序状态(登录等)的最佳方法

c# - 无边框winform窗体阴影

c# - 使任务栏上的应用程序图标具有透明背景(UWA)

C# Do-Loop 不向字符串添加字符

mysql - xtragrid devexpress 中的主详细信息 View

c# - datagridview鼠标悬停事件如何判断你在哪一列

c# - 如何摆脱try catch?

c# - WPF ValidatesOnDataErrors=False 不工作

c# - 在 WPF 中使用 Oxyplot 进行数据绑定(bind)