【问题标题】:Issue with changing Label's text of another form更改标签的另一种形式的文本的问题
【发布时间】:2022-08-15 20:32:05
【问题描述】:

我有两种形式Form1 和Form2,Form1 包含一个名为label1(公共)的标签,现在Form2 包含一个文本框和一个按钮,应该从文本框检索输入,我是试图将label1 的文本从Form1 表单更改为Form2 的TextBox 的输入。

这是我到目前为止尝试过的,

Form1 班级:

 public partial class Form1 : Form
    {
        public Form1()
        {  
           InitializeComponent();
           this.Text = \"Main Form\";
         }


    public void label1_Click(object sender, EventArgs e) {
        
    }

       public void change_label_func(string ss) {
           this.label1.Text = ss;
       }
       
           public void button1_clicked(object sender, EventArgs e) {
                  Form4 sec_form = new Form4();
                  sec_form.Show();
}

 }

Form2类:

public partial class Form4 : Form
    {
        public Form4() {
            InitializeComponent();
            this.Text = \"Create New Directory Page\";
            this.Icon = new Icon(@\"C:\\Users\\USER\\Documents\\FlowStorage4.ico\");

        }

        private void textBox2_TextChanged(object sender, EventArgs e) {

       }

        public void guna2Button2_Click(object sender, EventArgs e) {    
         
             Form1 get_dir = new Form1();
             get_dir.change_label_func(textBox2.Text);
       }

现在,当我单击按钮时,Form1 上的标签没有任何变化。

  • 如您所知,doesn\'t work 对您的问题并没有真正的帮助,您能否更准确一点。
  • 小提示,调用 Form1 get_dir = new Form1(); 创建一个新表单并不适合更改旧表单的值
  • 这些表格在同一个程序中吗?如果是,您如何打开第二个表格?
  • @Md.SumanKabir 是的,他们在同一个程序中,我使用 Form4 sec_form = new Form4() 打开第二个表单。

标签: c# winforms


【解决方案1】:

问题出在您的代码中。您总是在这一行使用Form1 的新实例:

Form1 get_dir = new Form1();

您需要从您打开Form2 的位置使用Form1 的实例。为此,请在 Form2 类中声明一个 Form 变量,如下所示:

Public Form parentFrm = new Form();

当您在Form1 中打开Form2 时,发送Form1 的实例,如下所示:

Form4 sec_form = new Form4();
sec_form.parentFrm = this;

然后,在您的 guna2Button2_Click 事件中使用此实例,如下所示:

public void guna2Button2_Click(object sender, EventArgs e) 
{    
    parentFrm.change_label_func(textBox2.Text);
}

我没有测试过代码,但这是使它工作的概念之一。

【讨论】:

    【解决方案2】:

    每个表单都有一个消息循环,它在值更改时处理更新,这从 windows 开始就是这样。

    所以:

    一个窗口附有一个窗口过程。所有消息都通过的函数。消息被发送到函数是因为有一个线程在无限循环中运行。 (直到 WM_CLOSE)

    while (GetMessage(&msg, NULL, 0, 0))
    {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
    

    当你说

    label1.Text = "new";
    

    几条消息被发送到windows消息队列并按顺序处理。例如,发送的一条消息是 WM_PAINT,它将处理构成文本“新”的像素的重绘。

    所以一般不会在表单之间共享标签。当您在另一个窗口设置新文本时,可以暂停一个窗口的消息队列处理。奇怪的事情开始发生。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-11
      • 2012-04-09
      • 1970-01-01
      • 2020-12-15
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多