我从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);
}
}
}
答案 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);
}
}
}