【问题标题】:Display Value in textbox in Window application在窗口应用程序的文本框中显示值
【发布时间】:2013-05-02 04:35:20
【问题描述】:

我是 Window 应用程序的新手。我有两个表格form1和form2。 From1 有一个文本框,form2 有一个组合框。现在,当我关闭 form2 时,我想将 form2 的组合框选定项显示到 form1 的文本框中。所以我已经定义了一个静态类(marketclass)并将选定的值分配给 statik 变量。下面是我的form2代码。

    private void cboMarkets_SelectedIndexChanged(Object sender, System.EventArgs e)
    {
         marketclass.nAlgoproperty = Convert.ToInt32(cmbMarket.SelectedValue);
         this.Close();
    }

现在下面的id是我的form1代码。

   public Form1()
    {
        InitializeComponent();          

        if (marketclass.nAlgoproperty > 0)
        {
            textbox1.text = marketclass.nAlgoproperty;
       }
}

但是不工作。那么我怎样才能做到这一点呢。

谢谢。

【问题讨论】:

  • 究竟是什么不起作用?尽量具体。
  • 当我选择组合框值并关闭 form2 时,form2 的组合框选择值未显示在 form1 的文本框中。
  • form1 中的form2 在哪里调用,您应该在启动form2 之后进行分配,然后设置值
  • marketclass 是实例还是类?请记住,静态应该通过类名而不是实例来访问;

标签: c# winforms


【解决方案1】:

通过 ShowDialog() 显示 Form2,然后检索值:

// ... in Form1 ...
Form2 f2 = new Form2();
f2.ShowDialog(); // code stops here until "f2" is closed
textbox1.text = marketclass.nAlgoproperty;

【讨论】:

  • 是的,ShowDialog() 优于 Show() - 与后者进一步混淆的空间太大。
【解决方案2】:

一般情况

使用模型-视图-控制器 (MVC) 模式可以很好地解决此类问题。

这看起来像 WinForms,它并不完全支持 MVC。但是,尽管如此,您当然可以实现 MVC 模式。

对于一篇好的入门文章,我建议你看看

http://www.codeproject.com/Articles/383153/The-Model-View-Controller-MVC-Pattern-with-Csharp

针对这个问题

您正在尝试使用静态变量来获得类似的结果。问题很可能是您更改支持静态变量的值以及查找更改的时间。

textbox1.text = marketclass.nAlgoproperty;

在加载 Form1 时调用。可能是在 Form2 的复选框处理程序更新 marketclass 中的值之前确实加载了 Form1。

即使今天不是这种情况,这也说明了您现在使用的模式会遇到的问题类型。

MVC 模式通过将一个或多个控件绑定到支持变量来解决此类时间问题,这样,如果 UI 元素更改值,则值会更新,并且所有其他绑定的 UI 元素也会更新。相反,如果值发生变化(比如因为它是从数据库加载的),所有绑定的 UI 元素都会自动更新。

【讨论】:

    【解决方案3】:

    您是否设置了 ComboBox 的 ValueMember 属性?如果不是,那么您应该或者如果您使用组合框显示的文本作为值,则必须改用 SelectedText 属性:

    private void cboMarkets_SelectedIndexChanged(Object sender, System.EventArgs e)
    {
         marketclass.nAlgoproperty = Convert.ToInt32(cmbMarket.SelectedText);
         this.Close();
    }
    

    【讨论】:

      【解决方案4】:

      您正在Form1 的构造函数中执行textbox1.Text = marketclass.nAlgoproperty 赋值(即之前 Form2marketclass.nAlgoroperty 赋值)。

      抛开执行此操作的“最佳”方法,您可以在显示Form2Form1 调用之后执行分配(即一旦Form2 关闭)。

      form2.Show();
      textbox1.Text = marketclass.nAlgoproperty;
      

      应该这样做。一旦你得到这个工作,考虑一个更好的方法来做到这一点 - 例如。 MVC and Observer 设计模式。

      【讨论】:

      • 是的,我知道,但是当我打开 form2 时,选择组合框值并关闭 form2 然后我想在文本框中显示该值。如何在显示 Form2 的 Form1 中调用后执行分配
      • 如何在显示 Form2 的 Form1 中调用后执行分配。我不知道那样。你能给我举个例子吗?
      【解决方案5】:

      我找到了短代码,并把显示的值!

      
      
      int widht = Screen.PrimaryScreen.Bounds.Width;//l
      int height = Screen.PrimaryScreen.Bounds.Height;//h
      
      textbox1.text ="Widht -> " +widht + " : Height ->" +height
      
      

      欢迎你!!

      【讨论】:

      • 这与问题无关,没有表格,也没有;你什么意思?
      猜你喜欢
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2019-02-07
      • 2021-06-23
      相关资源
      最近更新 更多