C# 如何继承windows窗体控件
我有一个主窗体,带有datagridview、combobox、TextBox等控件。我创建了另一个窗体,我想用它作为向导进行选择,因为我试图让它看起来更友好。现在我希望能够继承主窗体内的控件。我没有类,也没有创建类,因为我不想使用它。我知道如何创建类并在我想要访问方法、属性和函数的表单中调用我的类 如何将控件从一个窗体访问到另一个窗体 e、 g datagridview和textbox来自form1。在表单2中,我希望能够访问这两个控件DataGridView和textbox。请注意,这里我举了一个例子,但从我的主要形式我有两种以上的控制 向导窗体中的我的代码C# 如何继承windows窗体控件,c#,winforms,inheritance,datagridview,C#,Winforms,Inheritance,Datagridview,我有一个主窗体,带有datagridview、combobox、TextBox等控件。我创建了另一个窗体,我想用它作为向导进行选择,因为我试图让它看起来更友好。现在我希望能够继承主窗体内的控件。我没有类,也没有创建类,因为我不想使用它。我知道如何创建类并在我想要访问方法、属性和函数的表单中调用我的类 如何将控件从一个窗体访问到另一个窗体 e、 g datagridview和textbox来自form1。在表单2中,我希望能够访问这两个控件DataGridView和textbox。请注意,这里我举
private void btnBrosweInput_Click(object sender, EventArgs e)
{
BrowseFile();
ReadFile(ref Gridview_Input,
ref txtInputfile,
ref cboLanguage,
bref btnNewfile);
//Errors that m getting from this method
1.Gridview_Input' does not exist in the current context
2.The best overloaded method match for .FrmExisitngFile.ReadFile(ref System.Windows.Forms.DataGridView, ref System.Windows.Forms.TextBox, ref System.Windows.Forms.ComboBox, ref System.Windows.Forms.Button)' has some invalid arguments
3.Error 5 Argument 1: cannot convert from 'ref Gridview_Input' to 'ref System.Windows.Forms.DataGridView'
}
我已将readfile的此方法放置在表单上
private void ReadFile(ref DataGridView _Grid, ref TextBox _InputTexBox, ref ComboBox _cboLanguage, ref Button _btnNew)
{
_Grid.Rows.Clear();
string PathSelection = "";
if (_InputTexBox.Text.Length > 0)
{
PathSelection = _InputTexBox.Text;
}
oDataSet = new DataSet();
XmlReadMode omode = oDataSet.ReadXml(PathSelection);
for (int i = 0; i < oDataSet.Tables[2].Rows.Count; i++)
{
string comment = oDataSet.Tables["data"].Rows[i][2].ToString();
string font = Between(comment, "[Font]", "[/Font]");
string datestamp = Between(comment, "[DateStamp]", "[/DateStamp]");
string commentVal = Between(comment, "[Comment]", "[/Comment]");
string[] row = new string[] { oDataSet.Tables["data"].Rows[i][0].ToString(), oDataSet.Tables["data"].Rows[i][1].ToString(), font, datestamp, commentVal };
_Grid.Rows.Add(row);
_btnNew.Enabled = true;
}
}
从向导窗体中,我试图从包含网格的主窗体中访问控件,所有内容都将加载到该网格中。代码中有很多内容,但主要问题是您试图从UI控件中操作数据。这是一个非常糟糕的想法,它极大地使您的设计复杂化,正如您已经从这个相当小的功能中看到的那样 正如我在OP的评论中所说的,您不希望操纵控件来处理数据。您希望操作来自POCO普通旧CLR对象的数据。然后更新或更好:数据绑定所有暴露这些数据的控件 因此,您应该从这样做开始:
public class Form2 : Form
{
private List<Things> _listOfThings;
private string _inputText;
private LanguageEnum _lang;
...
// Receives data, NOT controls!
public Form2(List<Things> listOfThings, string inputText, LanguageEnum lang, ...)
{
_listOfThings = listOfThings;
...
}
...
}
您可以使用Form2类中的私有字段读取和更新数据。当Form2关闭时,您可以显式或使用更新Form1的控件。那么您只想访问其他表单的控件吗?只需在form2中声明该表单中的一个变量,并通过该变量访问您想要的内容,然后在构造函数中将其设置为在main Function中创建的form1变量。您能否在编码中向我展示一下,以便给我一个亮点?您能否解释您的确切目标,form1将具有什么功能?它有什么作用?form2会有什么?它对form1的控件有什么作用?niceman我想他只是想知道,我引用他的话:我如何从一个窗体访问另一个窗体的控件。@GrawCube我想应用它。不只是为了know@JuniorSD当然,这段代码并不是要复制粘贴的。这只是一个总体思路的说明,目的是让你在正确的轨道上开始。那你的工作就是让它满足你自己的需要。若你们有一个特定的问题,编辑你们的问题的细节,或张贴另一个问题,若它不是真正相关的这一个。
Form2 form2 = new Form2(listOfThings, inputTextBox.Text, ...);
form2.ShowDialog();