2012-02-07 95 views
0

我想使用继承传递一个字符串从一个窗体到另一个使用ref.class。我看着它,说实话,我认为这应该工作。但是,在我的设置文字方块调试没有出现......继承与C#

这里是我的参考级:

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中将其设置为我的设置窗体中的文本框。感谢您的期待。

+2

为什么你有两个属性,一个是getter,另一个是setter,而不是同时具有getter和setter的单个“Value”属性?这并不能解决问题... – 2012-02-07 14:17:29

回答

0

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

Click here to see a post which does similar thing.

在窗体2

public string URL {get; set;} 

在Form1

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

希望这对你的作品。

+0

这个解决方案竟然是简单的。非常感谢你。 – Marshal 2012-02-07 14:56:52

5

首先,这与继承无关。

不,它绝对是应该不是的工作。您正在创建两个不同的Ref实例 - 因此在其中一个值中设置值不会使其在另一个中可用。您需要创建一个Ref的实例,并使两个表单都知道它 - 以便它们可以将它用作共享通信通道。

就我个人而言,我认为这无论如何都是表单之间沟通的最佳方式 - 例如,您应该考虑使用事件 - 但这就是为什么它目前无法正常工作。

正如在评论中指出的那样,拥有两个单独的属性是很奇怪的。如果我真的想这种行为,我就写了一个类为:

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

你正在创建在每个地方一个新的Ref对象让你在webBrowser1_DocumentCompleted设置的值是不同的对象上,以在获得load

3

因为你创建新的对象时,写“新”

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

如果调试你可以看到REFF是空的..

this应该帮助你

1

你为什么不只是建立在将要打开的窗体公共财产。这样,您可以在打开它并进一步使用它之前设置它。

1

嗯,那里开始。

起初我建议你简单地上课。

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

但这不是问题。

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

所以你可以做两件事。

  1. 如果这是一个设置表单,您应该将值Ref.Url保存到应用程序设置。 或
  2. 您必须将参考文献的实例传递给您的设置表单。
0

好吧,这是丑陋的,而是执行此操作:

class Ref 
{ 

    private String _url; 

    public String URL 
    { 

     set { _url = value; } 
     get { return _url; } 
    } 
} 

然后,你需要你的main类中创建一个Ref例如,当你创建它传递给你的Settings类。然后,你可以往里面放你Settings类中,像这样:

myref.URL = "whatevergoeshere"; 

当结束后,您Settings对话框,你就可以看你的Ref对象内部,看看URL是什么。

+0

令人讨厌的是我在过去曾做过Java,当时它非常简单。很干净,现在用C#做完全忘了一切。感谢您的帮助,因为在将来使用少量对象时,我会将其作为参考。 – Marshal 2012-02-07 14:58:31

0

好吧,你真的没有使用继承......你遇到的问题是你在两个不同的地方声明的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" 
     };