如何使用另一个类中的 UI 表单控件?我想在另一个类中使用这些控件,然后将其调用到我的主窗体中。问题是我创建的新类似乎无法访问这些控件的标签或文本框,并且我不断收到错误。
我该如何解决这个问题?
错误信息:
FirstName_text 由于其保护级别而无法访问
First_Name_label 由于其保护级别而无法访问
当前上下文中不存在颜色
public void Checker()
{
//First Name Validation
if (Regex_Static_Class.FirstNameRgex.IsMatch(FirstName_text.Text) == false)
{
First_Name_label.Text = "invalid first name";
Error_Lable.ForColor = Color.Pink;
}
}
我猜 First_Name_label 是一个 UI 标签,它也必须可以从您的其他类访问。
也许制作一个 setter 方法来将文本填充到标签中。
我想说,您必须在 Forms Designer 中将控件的
Modifiers属性设置为
public
或 internal
才能从另一个类访问它。控件的实例默认受到保护。
这就是你问题的答案。另一件事是,这样做并不是最好的主意。您不应该直接访问表单之外的表单控件。 例如,表单类应该封装其控件并公开一个接口来更改它们。
另外Color
不存在很可能是因为您在另一个班级中没有适当的
using
。它与条件无关(引用从原始问题中删除的条件)。
// All open forms in your application will be placed in fcOpenForms.
FormCollection fcOpenForms = Application.OpenForms;
// Perform iteration for the form to be accessed by it's tag name.
foreach(Form fOpenForm in fcOpenForms.OfType<Form>().ToList()) {
if(fOpenForm.Tag != null && fOpenForm.Tag.Equals("Form1")) {
//Now iterate for the textbox tag name.
//
foreach(TextBox tFirstNameTextBox in fOpenForm.Controls.OfType<TextBox>().ToList()) {
if(tFirstNameTextBox.Tag != null && tFirstNameTextBox.Tag.Equals("FirstName_text")) {
//Now iterate for the label's tag names.
//
foreach(Label lFirstNameLabel in fOpenForm.Controls.OfType<Label>().ToList()) {
if(lFirstNameLabel.Tag != null && lFirstNameLabel.Tag.Equals("First_Name_label")) {
// You can now access these two controls "FirstName_text" and
// "First_Name_label" by calling it's variable name not the controls name.
//
tFirstNameTextBox.Text = "Your Text Here";
lFirstNameLabel.Text = "invalid first name";
// Any other control can be accessed using the same technique. You can either iterate
// for "Error_Label" here or up under where "First_Name_label" was accessed, it depends
// on where you see fit, to suite your needs at the time of accessing these controls in
//your application.
foreach(Label lErrorLabel in fOpenForms.Controls.OfType<Label>().ToList()) {
if(lErrorLabel .Tag != null && lErrorLabel .Tag.Equals("Error_Lable")) {
lErrorLabel.ForColor = Color.Pink;
}
}
}
}
}
}
}
}
如果任何控件驻留在正在访问的表单的子容器中,则必须先分别访问该子容器,然后才能访问控件,例如组框,例如foreach(fOpenForms 中的 GroupBox gGroupBox) 然后 foreach(gGroupBox.Controls 中的 Control cChildControl) 等。
希望这有帮助...