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

本文关键字:获取 字符串 dll 窗口 第二个 | 更新日期: 2023-09-27 18:08:53

我有一个问题,从dll文件读取字符串。下面是一些清单。我不知道为什么在window1我得到空字符串。在主窗口,我可以从dll文件中读取。我想从dll中读取这个字符串在window2, window3…该怎么办?

Dll文件,

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

主窗口的应用程序,

 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();
    }
}

Window1,

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);
        }
    }
}

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

应该使用静态变量。你现在面临的问题是你有两个不同的类实例。

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

通过构造函数将st注入到window1中:

应用程序主窗口

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();
    }
}
}

Window1:

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);
    }
}

}

问题是您正在使用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);
    }
}