在第二个窗口中从dll获取字符串

时间:2014-06-17 13:24:54

标签: c# wpf dll get set

我从dll文件读取字符串时遇到问题。以下是一些列表。我不知道为什么在window1中我得到空字符串。在MainWindow中我可以从dll文件中读取。我想在window2,window3中从dll读取这个字符串......怎么办?

Dll文件,

namespace stringTest
{
    public class DllstringTest
    {
        string string1;
        public string testString
        {
            get
            {
                return this.string1;
            }

            set
            {
                this.string1 = value;
            }
        }

    }
}  

MainWindow应用程序,

 public partial class MainWindow : Window
 {

    public MainWindow()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        DllstringTest st = new DllstringTest();
        st.testString = "5";
        Window1 w1 = new Window1();
        w1.Show();
    }
}

窗口1,

namespace stringTest_app
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            DllstringTest st1 = new DllstringTest();
            MessageBox.Show(st1.testString);

        }
    }
}

3 个答案:

答案 0 :(得分:0)

您应该使用静态变量。您目前面临的问题是您有两个不同的类实例。

解决方案是创建一个静态DllstringTest变量并在整个应用程序中使用它。

答案 1 :(得分:0)

问题是您正在使用DllstringTest的单独实例。您不能在一个实例中设置值,并让它神奇地设置所有未来的实例。 (从技术上讲,你可以,但它不是你想做的,也不会是魔术)

您可以使用静态类,您只需要一个实例:

public static class DllstringTest
{
    public static string testString { get;set; }
}

您可以这样访问:

DllstringTest.testString

或(可能是更好的方法)您可以将实例从主表单传递到其他表单:

//IN MainWindow
private void button1_Click(object sender, RoutedEventArgs e)
{
    DllstringTest st = new DllstringTest();
    st.testString = "5";
    Window1 w1 = new Window1();
    w1.DllInstance = st;
    w1.Show();
}

//IN Window1
public partial class Window1 : Window
{
    public DllstringTest DllInstance { get;set; }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(DllInstance.testString);
    }
}

答案 2 :(得分:0)

通过构造函数将stin注入window1:

MainWindow应用程序

public partial class MainWindow : Window
    {

    public MainWindow()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        DllstringTest st = new DllstringTest();
        st.testString = "5";
        Window1 w1 = new Window1(st);
        w1.Show();
    }
}
}

窗口1:

namespace stringTest_app
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
    private DllstringTest st;
    public Window1(DllstringTest st)
    {
        this.st = st;
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        //DllstringTest st1 = new DllstringTest();
        MessageBox.Show(this.st.testString);

    }
}

}