Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何继承windows窗体控件_C#_Winforms_Inheritance_Datagridview - Fatal编程技术网

C# 如何继承windows窗体控件

C# 如何继承windows窗体控件,c#,winforms,inheritance,datagridview,C#,Winforms,Inheritance,Datagridview,我有一个主窗体,带有datagridview、combobox、TextBox等控件。我创建了另一个窗体,我想用它作为向导进行选择,因为我试图让它看起来更友好。现在我希望能够继承主窗体内的控件。我没有类,也没有创建类,因为我不想使用它。我知道如何创建类并在我想要访问方法、属性和函数的表单中调用我的类 如何将控件从一个窗体访问到另一个窗体 e、 g datagridview和textbox来自form1。在表单2中,我希望能够访问这两个控件DataGridView和textbox。请注意,这里我举

我有一个主窗体,带有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();