【问题标题】:Get the value of a textbox100 of Form2 to Form1获取Form2的一个textbox100的值到Form1
【发布时间】:2012-08-10 04:02:06
【问题描述】:

当 DateTime.Now = 用户输入日期时,我想隐藏一个按钮。 textbox100 在 Form2 中并且已经公开,但我知道还缺少其他内容,因为我收到错误消息:“名称 'textBox100' 在当前上下文中不存在。”

谢谢。

public void Form1_Load(object sender, EventArgs e)
{
    var dateTimeStr = textBox100.Text;
    var user_time = DateTime.Parse(dateTimeStr);
    var time_now = DateTime.Now;

    if (time_now >= user_time)
    {
        button1.Visible = false;
    }
}

【问题讨论】:

  • 这不是 JavaScript:你为什么在每一行都使用var?它使您的代码难以阅读。
  • 因为右边的type很明显不是吗?
  • @TimSchmelter 嗯,是的,但是在 C# 中(与 JavaScript 不同,程序员习惯于阅读这样的代码)我习惯于读取变量的类型、标识符,然后初始化值。必须为自己找出类型并不难,但它确实会不必要地减慢我的速度。它还使代码更混乱,更难维护。
  • 别担心那些家伙,我对 C# 很陌生。
  • @JoaoCarlosRafael: 其实he has answered你的问题;)

标签: c# forms textbox


【解决方案1】:

即使是公开的,它仍然属于Form2这个类

var dateTimeStr = Form2.textBox100.Text;

【讨论】:

  • Form2 是类型,textBox100 是它的 instance 中的 TextBox。您不能将控件设为静态。
  • 我是这样做的:public Form2 frm2 = new Form2(); ... var dateTimeStr = frm2.textBox100.Text;
【解决方案2】:

如果 Form2 没有实例化在 Form1 中有引用,则无法获取 textbox100 的文本。然后使用 UnLoCo 的线路。当然它必须在 Form2 中公开

【讨论】:

    【解决方案3】:

    您需要改进表单之间的沟通。请参阅this question 中接受的答案。

    适应您的代码:

    using ( var form = new Form2() )
    {
        var dateTimeStr = form.textBox100.Text;
        var user_time = DateTime.Parse(dateTimeStr);
        var time_now = DateTime.Now;
    
        if (time_now >= user_time)
        {
            button1.Visible = false;
        }
    }
    

    如果取TextBox的值之前需要等待,即等待用户输入输入,那么可以这样写:

    string dateTimeStr;
    using ( var form = new Form2() )
    {
        form.submitButton.OnMouseUp += (source, e) =>
        {
            dateTimeStr = form.textBox100.Text;
        };
    } 
    

    假设您在表单的某处有一个提交按钮。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 2015-05-19
      相关资源
      最近更新 更多