Inheritance with C#

本文关键字:with Inheritance | 更新日期: 2023-09-27 18:23:51

我正在尝试使用继承,使用ref.class将字符串从一个表单传递到另一个表单。我正在研究它,老实说,我认为这应该可行。但当调试时,我的设置文本框中没有出现任何内容。。。

这是我的参考课:

    class Ref
{
    private String _url;
    public String Sett
    {
        set { _url = value; }
    }
    public String Gett
    {
        get { return _url; }
    }

我正在从主窗体设置它,并从设置窗体中获取它

这是我的主要表格:

    private void webBrowser1_DocumentCompleted(object sender,WebBrowserDocumentCompletedEventArgs e)
        {Ref reff = new Ref();
        this.Text = webBrowser1.Document.Title + " - NHS Cerner Booking Dash";
        textBox1.Text = webBrowser1.Document.Url.ToString();
        reff.Sett = webBrowser1.Document.Url.ToString();

最后这是我的设置表单

    public void load()
    {
        Ref reff = new Ref();
        textBox3.Text = reff.Gett;
    }

我确信这看起来有点复杂。因此,为了澄清,我想从主表单中获取URL,并将其设置为我的ref.class,然后从ref.class中获取,并将它设置为我设置表单中的textBox。谢谢您的关注。

Inheritance with C#

首先,这与继承无关。

不,它绝对不应该工作。您正在创建Ref的两个独立实例,因此在其中一个实例中设置值不会使其在另一个实例上可用。您需要创建Ref的一个实例,并使两个

就我个人而言,我不认为这是表单之间交流的最佳方式——例如,你应该考虑使用事件——但这就是为什么它目前不起作用。

正如评论中所指出的,有两个单独的属性是非常奇怪的。如果我真的想要这种行为,我会把这个类写成:

public class MutableWrapper<T>
{
    public T Value { get; set; }
}

因为在写入"new"时创建了新对象

public void load()
{
    Ref reff = new Ref();
    textBox3.Text = reff.Gett;
}

如果你调试,你可以看到reff是空的。。

这应该有助于

您将在每个位置创建一个新的Ref对象,因此您在webBrowser1_DocumentCompleted中设置的值与在load中检索的值在不同的对象上。

为什么不在将要打开的表单中创建一个公共属性呢。通过这种方式,您可以在打开它之前设置它,并进一步使用它。

Puh,从那里开始。

起初我建议你简化一下你的课。

public class Ref
{
    public string Url { get; set; }
}

但这不是问题所在。

问题是您的Ref类有两个不同的实例。

所以你可以做两件事。

  1. 如果这是一个设置表单,则应将Ref.Url的值保存到"应用程序设置"中。或
  2. 您必须将Ref的实例传递到"设置"窗体

您不需要任何Ref类。在第二个表单中创建一个公共属性,在创建该表单时访问该属性并分配URL值。

点击这里查看做类似事情的帖子。

Form2

 public string URL {get; set;}

Form1

 Form2 theNewForm = new Form2();
 theNewForm.URL = "your url value";
 theNewForm.Show();

希望这对你有用。

好吧,这很难看,改为这样做:

class Ref
{
    private String _url;
    public String URL
    {
        set { _url = value; }
        get { return _url; }
    }
}

然后你需要在main类中创建一个Ref实例,并在创建时将其传递给Settings类。然后你可以在Settings类中填充它,如下所示:

myref.URL = "whatevergoeshere";

当您的Settings对话框完成时,您将能够查看Ref对象内部,并查看URL是什么。

好吧,你真的没有使用继承。。。你遇到的问题是,你在两个不同的地方申报的Ref是不一样的。

        private void webBrowser1_DocumentCompleted(object sender,WebBrowserDocumentCompletedEventArgs e)
        {
            Ref reff = new Ref();
            //not the same "Ref" as below
        }
        public void load()
        {
            Ref reff = new Ref();
            //not the same "Ref" as above
        }

        //consider using properties instead of members... you get the get/set for free
        public class Ref
        {
            public string URL { get; set; }
            public void Load()
            {
                //do your load set
                this.URL = "What you want";
            }
            //...
        }
        //you can also declare the constructor on the fly if you want.. or call the Load() method
        Ref myRef = new Ref()
        {
            URL = "What you want"
        };