C#我有一个困惑

时间:2010-08-31 21:22:31

标签: c# .net winforms

我有一个困惑让我简要解释一下。 我有一个表单,我放置了一个文本框和一个命令按钮。 我有一个简单的课程。

class1代码。

class Class1
{
    string s = "hi";
    Form1 form1 = new Form1();
    public void cl()
    {
        form1.textBox1.Text = s;

    }


}

form1代码

private void button1_Click(object sender, EventArgs e)
    {
        Class1 class1 = new Class1();
        class1.cl();
    }

我的程序应该做的是当我点击按钮时,文本框中的文本应该变为“hi”。 我的错误是当我点击按钮时没有任何反应。

6 个答案:

答案 0 :(得分:9)

Class1中,您正在创建Form1的新实例,而不是使用已存在的实例。在按钮处理程序中,您可以将引用传递给当前表单,如下所示:

class Class1
{
    string s = "hi";
    Form1 form1;

    public Class1( Form1 targetForm )
    {
        form1 = targetForm;
    }

    public void cl()
    {
        form1.textBox1.Text = s;
    }
}

private void button1_Click(object sender, EventArgs e)
{
    Class1 class1 = new Class1( this );
    class1.cl();
}

答案 1 :(得分:0)

您正在创建一个新的Form1实例,因此您要更改未显示的表单上的文本,也不是实际单击该按钮的表单。您可以通过将表单作为参数传递给方法调用来执行您想要的操作:

class Class1
{
    string s = "hi";
    public void cl(Form1 form1)
    {
        form1.textBox1.Text = s;

    }  
}

private void button1_Click(object sender, EventArgs e)
{
    Class1 class1 = new Class1();
    class1.cl(this);
}

但是可能更好的形式(取决于实际情况)仅在表单代码本身中对表单外观进行更改,使用帮助程序类仅生成数据,例如:

class Class1
{
    string s = "hi";
    public string cl()
    {
         return s;
    }  
}

private void button1_Click(object sender, EventArgs e)
{
    Class1 class1 = new Class1();
    this.textBox1.Text = class1.cl();
}

答案 2 :(得分:0)

您正在创建一个新的Form1对象并设置文本框值,而您设置已打开表单的文本框值。

您可能应该致电textbox1.Text = "x";

如果您在c1函数中调用Show()方法,则会看到填充了文本框的新表单。

答案 3 :(得分:0)

您在点击处理程序的末尾缺少class1.ShowDialog()方法调用。

答案 4 :(得分:0)

添加用于显示表单的代码。       form1.ShowDialog()会将表单显示为“模态”对话框。模态是在此表单关闭之前,您无法对原始表单执行任何其他操作。

你得到的行为没有发生任何事情,因为表格不可见。一旦你打电话给 ShowDialog(),所有代码都将在该表单上执行,在你关闭表单之前,你将无法调用它。

class Class1
{
    string s = "hi";
    Form1 form1 = new Form1();
    public void cl()
    {
        form1.textBox1.Text = s;
        form1.ShowDialog();    // Add this line to show the form.
    }
}

答案 5 :(得分:-1)

你为什么不抓住你的错误?

class Class1
{
    private Form1 _Instance = null;
    public Form1 Instance
    {
        get{return _Instance;}
        set{_Instance = value;}
    }

    public void cl()
    {
        if(Instance == null)
        {
            try
            {
                Instance = new Form1();
            }catch (SomeException e)
            {
                //Log e.ToString();
                return;
            }
        }

        Instance.textBox1.Text = "hiya";
    }
}

通过这种方式,您的应用程序将不易出错,并且更易于调试。