问题设置另一个表单上的标签文本

时间:2008-12-02 17:31:03

标签: c# winforms

我试图通过增加字体大小来使Kiosk应用程序更容易访问 主表上没问题。
我在使用相同消息的小表单替换MessageBoxes(我认为无法增加字体大小)时遇到问题。

这是我遇到问题的地方。主表单不能查看错误表单及其标签来设置文本。我已经尝试在错误表单上为私有标签设置属性,但它仍然无效。

我将非常感谢任何帮助。我一直在尝试应用我在从各种C#源读取几个线程时学到的东西。

我注意到两件奇怪的事情:

  1. 在MainForm中,当我输入ErrorForm时,会弹出Intellisense建议代码列表,但变量LblNotCheckedInBecause不会出现在列表中。
  2. 编译器错误说明了LBlNotCheckedInBecause。get语句,似乎我应该引用set语句,因为我试图设置该值。
  3. 以下是我认为涉及的代码部分:

    来自ErrorForm.Designer.cs

    private System.Windows.Forms.Panel panel1;
    private System.Windows.Forms.Label lblNotCheckedInBecause;
    
    // property I created to try to be able to change the label
    public string LblNotCheckedInBecause  
    {
        get { return this.lblNotCheckedInBecause.Text; }
        set { this.lblNotCheckedInBecause.Text = value; }
    }
    

    来自MainForm.cs

    // this is what I'm trying to replace
    MessageBox.Show("You were not checked in because of the following reasons:" + sErrors);
    
    // this line is causing a compiler error
    ErrorForm.LblNotCheckInBecause = "You were not checked in because of the following reasons:" + sErrors; 
    

    编译错误:

      

    错误1非静态字段需要对象引用,   方法或财产   'LogisticsKiosk.ErrorForm.LblNotCheckInBecause.get'C:\ Documents and   设置\我的文档\ Visual Studio   2005 \ Projects \ LogisticsKiosk \ Forms \ MainForm.cs 107 17 LogisticsKiosk

5 个答案:

答案 0 :(得分:4)

您无法访问ErrorForm,就好像它是静态的一样。这只是类定义,您需要在ErrorForm的实例上设置属性。

在您的应用中的某个位置,您创建了一个新的ErrorForm。您需要获取该变量并在其上设置LblNotCheckedInBecause属性。

寻找这样的代码;

ErrorForm errorFrm = new ErrorForm();
errorFrm.Show();

如果您有对该变量的引用,则可以执行此操作;

errorFrm.LblNotCheckedInBecause = "Some Reason";

以下方法不起作用,因为您的属性不是静态的(如果不创建您可能不想做的单例,则无法使其静态化)

// Doesn't work
ErrorForm.LblNotCheckedInBecause = "Some Reason";

答案 1 :(得分:2)

另一个要注意的快速事项:您提到您编辑了以下代码: ErrorForm.Designer.cs。

我建议将添加的代码放在ErrorForm.cs中。编译器喜欢认为它拥有XXXXXX.Designer.cs的专有权,并且已知在对文件进行自动编辑时会吹掉更改。

答案 2 :(得分:1)

您需要在使用它之前实例化ErrorForm类。如果表格是静态的,您就不能使用它。

ErrorForm ef = new ErrorForm();
ef.LblNotCheckedInBecause   = "Your error text";
ef.Show();

答案 3 :(得分:1)

感谢大家的帮助。在实例化表单后,我能够使代码正常工作。有趣的是,Intellisense花了几分钟才赶上来。

答案 4 :(得分:0)

要记住的一件事是,另一位开发人员阅读代码和理解是多么容易。 我看到的最佳选择是

ErrorForm form = new ErrorForm(); form.SetErrorLableMessageTo(“错误文本”); form.Show();

这是非常易读的。在我们去查看构造函数中发生了什么之前,在构造函数中传递args并没有显示出意图。除了你想要做的所有情况,如果你选择构造方式,那么你受到约束(不是灵活的设计)。