【问题标题】:Public variable invoking incorrect result公共变量调用不正确的结果
【发布时间】:2013-05-14 13:20:53
【问题描述】:
public partial class ThanglishToTamilGUI : Form
{
    public string anz;

    public ThanglishToTamilGUI()
    {
        InitializeComponent();
    }       

    public void btnConvertToBraille_Click(object sender, EventArgs e)
    {
        anz = richTextBoxTamil.Text.ToString();

        GUI.TamilToBrailleGUI c1 = new GUI.TamilToBrailleGUI();
        c1.Visible = true;            
    }

}

我需要将我的richtextbox (richTextBoxTamil) 内容传递给变量调用 anz。

我正在以其他形式检索 anz 变量作为表单加载事件:

    private void TamilToBrailleGUI_Load(object sender, EventArgs e)
    {
        ThanglishToTamilGUI tt = new ThanglishToTamilGUI();
        String apper = tt.anz;
        richTextBoxTamil.Text = apper;
    }

我的问题: 结果我得到空值。因为如果我分配了任何正确调用的值。

public partial class ThanglishToTamilGUI : Form
{
    public string anz = "Hai";

    public ThanglishToTamilGUI()
    {
        InitializeComponent();
    } ...

这里我的 ans 值被传递为“Hai”。但我的要求是获取richTextBoxTamil 中的任何内容并将其传递给调用anz 的公共变量。这里出了什么问题,请帮助我。

谢谢。

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    这就是问题所在:

    ThanglishToTamilGUI tt = new ThanglishToTamilGUI();
    String apper = tt.anz;
    

    您如何期望apper 永远不会是空值?您正在从一个新创建的表单中获取变量,该表单从未显示过,也从未调用过 btnConvertToBraille_Click。

    大概有一个 existing ThanglishToTamilGUI 对象某处,那是您要从中获取变量的对象。基本上,一个表单需要知道另一个表单的instance。

    (我也强烈建议使用属性而不是公共变量,但这是另一回事。您甚至可能根本不需要单独的变量 - 只需声明一个获取 richTextBoxTamil.Text 的属性。)

    或者,只需将相关字符串传递给 new 表单的构造函数:

    public void btnConvertToBraille_Click(object sender, EventArgs e)
    {
        GUI.TamilToBrailleGUI c1 = new GUI.TamilToBrailleGUI(richTextBoxTamil.Text);
        c1.Visible = true;            
    }
    

    那么新表单根本不需要知道旧表单 - 它只需要知道要显示的文本。

    (您可能希望将其从构造函数中拉出并放入可设置的属性中,但基本原理相同:创建表单的代码推送数据,而不是新表单拉取数据。)

    【讨论】:

    • 谢谢。真的很有帮助。 :)
    • @SutharshanSuthan:是的,你需要创建适当的构造函数来调用。
    • 是的,正是我所做的。再次感谢。 :)
    【解决方案2】:

    您可以创建一个公共属性来访问文本框的当前 Text 值。

    public string RichTextBoxText 
    {
    get
    {
       return richTextBoxTamil.Text;
    }
    }
    

    您现在执行此操作的方式是实例化表单,但不会触发单击事件。因此,除了将字段初始化为的内容之外,您将无法获得任何其他信息。

    Load 不是寻找用户输入的地方。事件(如点击)是您需要检查属性值的地方:

    private void SomeClick(object sender, EventArgs e)
    {
        String result =  thanglishToTamilGUIObject.RichTextBoxText;
        //do something with text
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2012-10-10
      • 2022-01-02
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多