【问题标题】:Accessing design time controls from a separate design-time form从单独的设计时表单访问设计时控件
【发布时间】:2016-02-10 19:34:09
【问题描述】:

我正在寻找一种最简单的方法来从另一个窗体访问在 Windows 应用程序窗体的主窗体中创建的设计时控件。我将想要操纵所有控件,并且不希望使用 getter 和 setter 方法。只会有几个额外的表单仅用于输入以更改主表单上的控件状态 - 所以我不关心这里的最佳实践,因为这不会是一个大项目很多人会工作,多个变量会混淆,因为我对此完全陌生,想要一些有效的东西。我不在专业的编程环境中工作。

我希望能够以某种方式简单地用点语法解决它们。

也就是说:仅仅将类型更改为“公共”似乎并不允许我这样做。

因此,对于文本框,当我将其更改为:

private System.Windows.Forms.RichTextBox AssignmentSectNumber;

public System.Windows.Forms.RichTextBox AssignmentSectNumber;

一旦我把它放到我的表单中,C#系统会自动声明它,我仍然无法从表单二中访问它

Form1.AssignmentSectNumber.Text

有什么方法可以在Form1 中设置控件,以便可以通过Form1 通过点语法或直接通过直接寻址它们来在Form2 中寻址它们?

PS:当我在设计时将控件放入表单时,我看不到将控件“公开”在列出的任何属性下的方法。我错过了什么吗?

【问题讨论】:

  • 很难说你想在这里做什么。 Form1.AssignmentSectNumber 会报错,因为AssignmentSectNumber 是一个实例属性,而不是静态的。您不能在运行时更改表单的设计,因为在加载表单并进行InitializeComponent 调用后,表单将重置为默认值。我认为最好的选择是以编程方式构建整个表单,但这是一个巨大的 PIA,又名 Form newForm = new Form(); newForm.Controls.Add(new SomeControl());... 用于所有控件和设置。
  • 这真的不是我的选择。表格是完全设计好的。这需要付出很大的努力。你是说如果我在设计模式下制作了两个表单,并且表单 1 有一个文本框,那么表单 2 中的代码就无法更改表单 1 文本框中的文本? form1 中的所有控件必须永远与 form2 隔离,除非我在程序中创建它们?
  • 可以修改,但是要修改它的一个instance,即Form2 frm2 =new Form2(); frm2.AssignmentSelector.Text ="some value";不能对类型本身进行操作,必须对实例。这也意味着论坛上的控件需要设置为公开。
  • 这可能是一个愚蠢的问题,但请记住,我是这方面的新手。当我运行程序 form1 出现在屏幕上。这不是说一定有它的实例吗?如果该实例的名称不是 form1 那会是什么?
  • 查看您的 Program.cs 文件,您会看到类似Application.Run(new Form1()); 的行。那是正在创建的 Form 的实例,它不会存储在变量中,但可以对其进行更改。

标签: c# forms controls design-time


【解决方案1】:

在任何 我在设计时将它们放入表单时列出的属性。我是不是 遗漏了什么?

选择控件,然后在属性窗格中,将其修饰符属性更改为公共。

当我运行程序时,form1 出现在屏幕上。这不意味着 那一定有一个实例吗?如果该实例的名称 不就是form1吗?

您需要访问当前正在运行的 Form1 实例。有很多方法可以做到这一点。一种非常简单的方法是在调用其 Show() 方法时设置辅助窗体的 Owner:

// ... from within Form1 ...
Form2 f2 = new Form2();
f2.Show(this); // <-- setting Form1 as the "owner" of Form2 via "this"

现在,在 Form2 中,您将 .Owner 属性转换回 Form1 并访问您将 Modifiers 属性更改为 Public 的控件:

// ... over in Form2 ...
Form1 f1 = (Form1)this.Owner;
f1.label1.Text = "Hello from Form2!";

【讨论】:

  • 谢谢!还没有尝试过,但这看起来正是我需要的。我一直试图通过生成一个额外的表单来解决这个问题——这真是一团糟。
猜你喜欢
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 2013-02-10
  • 1970-01-01
  • 2013-04-29
相关资源
最近更新 更多