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。谢谢您的关注。
首先,这与继承无关。
不,它绝对不应该工作。您正在创建 就我个人而言,我不认为这是表单之间交流的最佳方式——例如,你应该考虑使用事件——但这就是为什么它目前不起作用。 正如评论中所指出的,有两个单独的属性是非常奇怪的。如果我真的想要这种行为,我会把这个类写成: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
类有两个不同的实例。
所以你可以做两件事。
- 如果这是一个设置表单,则应将
Ref.Url
的值保存到"应用程序设置"中。或 - 您必须将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"
};