-2

这很好用:

 private void button1_Click(object sender, EventArgs e)        
    {
         textBox1.Text = "dsfsdfsd";
    }

但是当我像这样使用它时,它永远不会在编译器中成功运行 textbox1.text ,但文本没有显示任何内容

private void button1_Click(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();
        form1.click();
    }

public  void click()
    {
        textBox1.Text= "asdasdas";
    }

请告知为什么我不能从任何方法更改文本框文本,除了直接处理用户(按钮)的方法,即使我在(按钮)方法和方法之间放置了一个桥接方法textbox1.text=("asdasdas");,它也永远不会起作用。请指教。

4

7 回答 7

4
private void button1_Click(object sender, EventArgs e)
{
    click();
}

您无需创建表单的新实例即可调用其方法之一。

于 2013-06-26T08:27:19.787 回答
2

您应该在实际更改文本之前订阅TextChanged事件,否则尚未附加事件处理程序:

public void click()
{
    textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
    textBox1.Text = "asdasdas";
}

此外,当调用 click 方法时,您不应该多次订阅同一个事件。最好只执行一次此订阅,例如在构造函数中:

public class Form1: Form
{
    public Form1()
    {
        textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
    }

    public void click()
    {
        textBox1.Text = "asdasdas";
    }

    public void textBox1_TextChanged(object sender, EventArgs e)
    {

    }    
}
于 2013-06-26T09:17:33.577 回答
1

这是因为您正在new创建一个新Form1实例。是的button1_Click成员Form1,因此您已经有一个Form1需要对其进行操作的实例。

IE

private void button1_Click(object sender, EventArgs e)
{
    this.click(); // or just `click();`
}

public  void click()
{
    textBox1.Text= "asdasdas";
}

private void textBox1_TextChanged(object sender, EventArgs e)
{

}
于 2013-06-26T08:28:41.787 回答
0

以下是如何制作 Windows 窗体应用程序的完整指南。你必须从基础开始学习。 你的第一个 C# Windows 窗体

于 2013-06-26T08:33:42.473 回答
0

我认为您的Program.bridge电话引起了混乱。

private void button1_Click(object sender, EventArgs e)
{
    Program.bridge();        
}

在该方法中,您正在实例化一个新的Form1. 这对已经显示的表单没有影响。尝试button1_click通过以下方式更改您的功能,看看是否有帮助:

private void button1_Click(object sender, EventArgs e)
{
    this.click();        
}

编辑: 如果你必须使用这种bridge方法,你可以在你的Program.cs

public static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        TheForm = new Form1();
        Application.Run(TheForm);
    }

    private static Form1 TheForm { get; set; }

    public static void bridge()
    {
        TheForm.Click();
    }
}

我不推荐这种方法,但如果你必须...

于 2013-06-26T09:32:17.150 回答
0

因为您click()在新Form实例上调用方法,所以将您的代码更改为:

private void button1_Click(object sender, EventArgs e)
{
    click();
}

public  void click()
{
    textBox1.Text= "asdasdas";
}
于 2013-06-26T08:28:01.383 回答
0

您正在创建表单的新实例并单击它,这不是您正在查看的表单,因此您不会看到更改。

相反,只需调用Click()此表单的方法。

于 2013-06-26T08:28:12.560 回答