无法更改文本框文本

时间:2013-06-26 08:25:47

标签: c#

这很有效:

 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");方法之间放置桥接方法,它永远不会奏效。请指教。

7 个答案:

答案 0 :(得分:4)

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

您不需要创建表单的新实例来调用其中一种方法。

答案 1 :(得分:2)

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

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

    }    
}

答案 2 :(得分:1)

这是因为您{{}} newForm1个实例。 button1_ClickForm1的成员,因此您已经拥有了需要操作的Form1个实例。

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

}

答案 3 :(得分:1)

以下是制作Windows表单应用程序的完整指南。你必须从基础知识开始学习。 Your First C# Windows Form

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

您正在制作表单的新实例并点击该表单,这不是您正在查看的表单,因此您无法看到更改。

而是只调用此表单的Click()方法。

答案 6 :(得分: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();
    }
}

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