在静态方法中调用文本框

时间:2015-02-21 00:03:20

标签: .net winforms

在静态函数中引用TextBox时遇到问题。 给出一个想法,看看下面的代码: 我创建了一个MainForm,其中包含一个带有按钮和文本框的Windows窗体。 文本框中填充了字符串。 在下面的主类中,我使用CheckInput()作为主循环。从各种回调函数(按下按钮)调用此函数并正常工作。 在开发过程中,我需要从另一个类(InitForm)调用相同的函数。为此,我必须首先使用MainForm类名。要做到这一点,我还必须使用'静态' CheckInput()函数之前的关键字。但突然TextBox引用无法正常工作。给出了错误。为了解决这个问题,我创建了一个MainForm实例:

MainForm c = new MainForm();
     if ( c.TextBox.Text != "")   
     {
         DoSomeAction();
     }

所有错误都消失了!

但.....在调试代码时,Textbox值消失了!在创建新实例时,似乎文本框值不是固有的。 如何获得原始文本框值?

约翰 主要课程

 public class MainForm : Form
    {
    private int ………… some variables

    // constructor
    public MainForm ()
    {
    Init();
    }
    }

    // Method
    public static bool CheckInput()
    {
    if ( TextBox.Text != "")   
    {
    DoSomeAction();
    }
    }


    Another class

    public class InitForm : Form
    {
    private int …………………….. some variables



     // constructor
     public InitForm()
     {
     Init();
                }
     // Method
     private void Button_Click(object sender, FormClosedEventArgs e)
     {
     MainForm.CheckInput();
     }

1 个答案:

答案 0 :(得分:0)

为简洁起见,代码已经缩减。

public class MainForm : Form
{
    public void DoSomething()
    {
    }

    private void DisplaySecondForm()
    {
        using (var frm = new SecondForm(this))
        {
            frm.ShowDialog();
        }
    }
}

public class SecondForm : Form
{
    private readonly MainForm _mainForm;

    public SecondForm(MainForm mainForm)
    {
        _mainForm = mainForm;
    }

    private void InvokeSomeActionOnMainForm()
    {
        _mainForm.DoSomething();
    }
}

我希望它有所帮助。