我有以下情況:一些數據完成的主窗口,它也是一個按鈕,打開一個新的模式窗口,您可以在其中選擇產品和產品範圍,然後單擊確定移動到下一個屏幕選擇數量,價格,並在批准數據後點擊確定,我想要訪問主窗口中模態窗口中選擇的數據,因爲它可以使用C#完成?C#和模態窗口
C#和模態窗口
回答
你可以做的東西,看起來或多或少是這樣的:
private void button1_Click(object sender, EventArgs e)
{
Form2 firstPopup = new Form2();
firstPopup.ShowDialog();
var someData = firstPopup.SomeValue;
Form2 secondPopup = new Form2();
secondPopup.ShowDialog();
var someOtherData = secondPopup.SomeValue;
doSomeStuff(someData, someOtherData);
}
在這種情況下SomeValue
是一個公共的getter和setter方法私人窗體上的屬性。它的價值將在表單關閉之前設置。您可以爲每個表單以及任意數量的表單提供任意數量的此類屬性。
這與Open,Save As和Folder對話框的工作方式類似。就拿打開文件對話框,一旦你點擊OK,你可以訪問該選擇
建議的文件:
在你的模式窗口,設置其保存數據的一些公共屬性。設置你的OK按鈕,設置表格的DialogResult就OK了,在你的父窗體,你可以做下面的測試(在這種情況下,DataModel的是您要訪問數據)
if(modalWindow.DialogResult == DialogResult.OK)
{
this.DataModel = modalWindow.DataModel;
}
這裏是一個如何的一些信息使用的DialogResult http://msdn.microsoft.com/en-us/library/system.windows.forms.form.dialogresult.aspx
通常與您遵循類似的模式,以由打開文件對話框,在這裏做這樣的事情用一個模態窗口:
public class MyDialog : Form
{
public MyResult Result { get { /* code elided */ } }
}
也就是說,除了具有模態˚F orm的代碼 - 你還公開一個給定類型的公共Result
屬性,它可以提供在表單的UI上輸入的數據(這比暴露表單上的控件更好,因爲它意味着你可以自由地更改所有這些,而不必重新 - 編碼依賴於它的任何其他形式)。
您確保該Result
是保證和有效如果單擊Ok
或Yes
(無論確認按鈕)按鈕可用。然後你確定你相應地設置了DialogResult
(你也可以給每個按鈕分配一個 - 例如DialogResult.Cancel
給一個取消按鈕)。
然後當你打開你的表格你做這樣的事情:
var form1 = new MyDialog();
if(form1.ShowDialog() != DialogResult.OK)
return; //abort the operation, the user cancelled/closed the first modal
MyResult form1Data = form1.Result; //get your actual data from that modal form.
//...and then on with your second modal
所以,如果你的模式(S)收集的數據,你走,如果中止任何被取消。
不要使用模態窗口!
如果你打電話
var dialog = new DialogWindow();
If (dialog.ShowDialog(mainWindow) == DialogResult.OK) {
use the result of the dialog window
}
對話窗口會模式,這意味着,你不能訪問其他窗口,同時它是開放的。
使用以下代碼,可以同時訪問這兩個窗口。但是,問題在於,在對話框運行時,主窗口中的代碼未暫停。
var dialog = new DialogWindow();
dialog.Show(mainWindow);
You cannot use the result of the dialog window here!
因此,您需要一種方法將對話框的完成與主窗口進行通信。我建議創建在對話窗口的事件爲此
public class ProductResultEventArgs : EventArgs
{
public ProductResultEventArgs(List<Product> products)
{
Products = products;
}
public List<Product> Products { get; private set; }
}
在對話窗口中
public event EventHandler<ProductResultEventArgs> ProductsChosen;
private void OnProductsChosen(List<Product> products)
{
var eh = ProductsChosen;
if (eh != null) {
eh(this, new ProductResultEventArgs(products));
}
}
private BtnOk_Click(object sender, EventArgs e)
{
OnProductsChosen(somehow get the product list);
}
在主窗口中,你可以做這樣的事情
var dialog = new DialogWindow();
dialog.ProcuctsChosen += Dialog_ProductsChosen
dialog.Show(mainWindow);
,並創建一個處理者
private Dialog_ProductsChosen(object sender, ProductResultEventArgs e)
{
use e.Products here
}
注意:將主窗口作爲參數傳遞到ShowDialog
或Show
將使該對話框的主窗口所有者。這意味着對話窗口將始終停留在主窗口的前面,並且不會在其後面消失。如果你最小化主窗口,這也會最小化對話窗口。
但是,它是讓它自動將主窗口中的控件與來自Silverlight應用程序中模態窗口的數據相加的方法嗎?我問,因爲我不久使用C# –
你的問題很不清楚。大多數在這裏回答的人都假設問題是關於將數據從對話窗口傳遞到主窗口以及模態窗口的可訪問性。現在你正在問完全不同的東西(添加一個控件),並首次提到Silverlight。您應該爲您的問題添加一個Silverlight標籤,因爲這需要完全不同於WinForms的解決方案。 –
- 1. 在模態窗口
- 2. jquery模態窗口
- 3. javascript模態窗口
- 4. jQuery模態窗口
- 5. 多模態窗口
- 6. Asp.Net:Javascript模態窗口
- 7. SmartGWT模態窗口
- 8. UWP模態窗口
- 9. HTML瞬態模態窗口
- 10. QT - 帶子窗口的模態窗口
- 11. 模態窗口後的Wicket Moda窗口
- 12. SharePoint。從模態窗口重定向到非模態窗口?
- 13. Bootstrap模態窗口而不是jQuery模態窗口
- 14. Java swing中模態窗口上的模態窗口?
- 15. 你可以調用模態窗口中的模態窗口嗎?
- 16. Rails設計寶石和模態窗口
- 17. Slick.js和多個Twitter Bootstrap模態窗口
- 18. backgroundWorker與進程和模態窗口
- 19. 更新面板和模態窗口
- 20. 響應模態窗口
- 21. 模態窗口重定向
- 22. Scriptaculous /原型模態窗口
- 23. 模態窗口的問題
- 24. 模態窗口先點擊
- 25. jQuery模態窗口示例?
- 26. Django自舉模態窗口
- 27. 模態窗口不顯示
- 28. 模態窗口位置
- 29. XIB模態窗口ios
- 30. AngularJS模態窗口指令
whathaveyoutried.com – deltree
通過參考傳遞您的參數。 – timmy
@timmy如何...這與問題有什麼關係? –