簡體   English   中英

如何從 C# 中另一個 class 中的公共方法中獲取值

[英]How to get a value from a public method in another class in C#

上下文:我正在制作 WPF 應用程序。 在這種情況下,我有一個帶有用戶控件的 window 和另一個 windows ,其中在用戶控件中引入了信息。 我有三個 windows: Main,我在其中創建按鈕,數據輸入 window(此數據稍后 go 到 main 以創建按鈕,使用showDialog()==true )和查看數據

問題:當我想從另一個 window 獲取變量到查看按鈕信息 window 時遇到問題。 這個名為 Window4 的 window 不接收變量,因此等於 null。

代碼:

//Click event of the new buttons created with data entering window's info.
void newBtn_Click(object sender, EventArgs e)
{
    Window4 win4 = new Window4();
    win4.Show();
}
...
var vent = new Ventanal2(); //Ventanal2 is data entering window
if (vent.ShowDialog() == true)
{
    ImageBrush nuestroIcono = vent.retornoIcono();
    string tituloHabilidad = vent.retornoTitulo();
    string grupoHabilidad = vent.retornoGrupo();
    int nivelHabilidad = vent.retornoNivel();
    //The method below creates the new button. The above get the button Data from the Data Entering Window
    crearBoton(tituloHabilidad, grupoHabilidad, nivelHabilidad, nuestroIcono);
}

//Data viewing window 
public Window4()
{
    InitializeComponent();
    var vent = new Ventanal2();
    ImageBrush nuestroIcono = vent.retornoIcono();
    string tituloHabilidad = vent.retornoTitulo();
    int nivelHabilidad = vent.retornoNivel();
}

如果我在數據查看 Window 的吸氣劑之前放置一個 showDialog() ,則輸入 Window 的數據會出現兩次,這不是我想要的。

解決方案應該是什么樣子:我想在我的數據查看 Window 中獲取數據輸入 Window(然后在我的按鈕創建窗口中)中介紹的數據。

提前感謝大家。

您應該能夠使用 windows 之間的事件來傳遞您的值。 看看這個討論的例子。

您應該嘗試將您的數據與您的視圖(窗口)分開您可以在這里做的是為您的 3 個 windows 可以訪問的所有數據設置一個 class。 然后,您可以將視圖的 dataContext 設置為數據實例 class 以便綁定可以訪問數據。 在創建 windows 時傳入您的數據實例 class 例如 ShowMyView(MyData myData) (有關更多信息,請查看 MVVM 模式。)

您可以將值存儲在變量中並將它們傳遞給Window4

private ImageBrush _nuestroIcono;
private string _tituloHabilidad;
private string _grupoHabilidad;
private int _nivelHabilidad;

void newBtn_Click(object sender, EventArgs e)
{
    Window4 win4 = new Window4(_nuestroIcono, _tituloHabilidad, _nivelHabilidad);
    win4.Show();
}

...
var vent = new Ventanal2(); //Ventanal2 is data entering window
if (vent.ShowDialog() == true)
{
    _nuestroIcono = vent.retornoIcono();
    _tituloHabilidad = vent.retornoTitulo();
    _grupoHabilidad = vent.retornoGrupo();
    _nivelHabilidad = vent.retornoNivel();
    crearBoton(_tituloHabilidad, _grupoHabilidad, _nivelHabilidad, _nuestroIcono);
}

...
public Window4(ImageBrush nuestroIcono, string tituloHabilidad, int nivelHabilidad)
{
    InitializeComponent();
    //use the parameters...
}

作為旁注,無論您的母語如何,都不使用英文成員名稱是一種不好的做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM