在第二个窗口中从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);
}
}
}
应该使用静态变量。你现在面临的问题是你有两个不同的类实例。
解决方案是创建一个静态的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);
}
}