台灣最大程式設計社群網站
線上人數
1463
 
會員總數:241330
討論主題:186904
歡迎您免費加入會員
討論區列表 >> C# >> C# ShowDialog 疑問
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
C# ShowDialog 疑問
價值 : 100 QP  點閱數:205 回應數:5

樓主

阿剛
門外漢
0 2
61 3
發送站內信

各位大大們好,小弟需要寫一支程式,概述如下

當主程式開啟時先檢查某個文字檔在不在,不在的話就重建(呼叫ReBuild_Config_Function)
在重建過程中 錯誤次數只能發生三次,超過三次整個程式就關閉( Application.Exit();)

若在呼叫方程式中若用
Form Rebuild = new RebuildConfig();
Rebuild.Show(); 此時原本的Form還是會繼續執行 (不是我要的結果)

所以我改用
Form Rebuild = new RebuildConfig();
Rebuild.ShowDialog(); 此時原本Form中的程式碼會暫停 (是我要的結果)

而這時我的問題就產生了

若使用Rebuild.Show

(ButtonClick事件)
int Rebuild_fail_count =0;
while (Rebuild_fail_count < 3)
{
if (Rebuild_Textbox_IP1.Text == "" || Rebuild_Textbox_IP2.Text == "" || Rebuild_Textbox_IP3.Text == "" || Rebuild_Textbox_IP4.Text == "")
{
MessageBox.Show("IP位址不可為空白");
Rebuild_fail_count++;
Rebuild_FailCount_Label.Text = "剩餘次數: " + Rebuild_left_Count;
break;
}
以上程式可以根據我按了幾次Button一直做判斷

但若是 Rebuild.ShowDialog()
跑上述程式後 當遇到break 後 就直接跳出while迴圈 整個對話視窗就結束了

所以我想要解決 使用Rebuild.ShowDialog 如何不讓程式只執行一次,而是可以像Rebuild.Show一樣停留在那等著被觸發
有人知道如何解決嗎?

搜尋相關Tags的文章: [ C# ] , [ Form.ShowDialog ] , [ Form.Show ] ,
本篇文章發表於2017-11-02 10:28
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

小魚
檢舉此回應
怪怪的,
break;不是應該出現在 讀取正確 或 達到三次 的時候嗎??
本篇文章回覆於2017-11-02 12:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

阿剛
檢舉此回應
小魚大大你好
在上述那個程式中只是一小段的判斷式 我下面還有一些else if 的判斷式,我把整段貼出來好了


int Rebuild_fail_count =0; //計算Fail的次數
while (Rebuild_fail_count < 3)
{

if (Rebuild_Textbox_IP1.Text == "" || Rebuild_Textbox_IP2.Text == "" || Rebuild_Textbox_IP3.Text == "" || Rebuild_Textbox_IP4.Text == "")
{
MessageBox.Show("IP位址不可為空白");
Rebuild_fail_count++;
break;
}
else if (Convert.ToInt32(Rebuild_Textbox_IP1.Text) > 255)
{
Rebuild_Textbox_IP1.Text = "";
MessageBox.Show("IP位址大於256");
Rebuild_fail_count++;
break;
}
else if (Convert.ToInt32(Rebuild_Textbox_IP2.Text) > 255)
{
Rebuild_Textbox_IP2.Text = "";
MessageBox.Show("IP位址大於256");
Rebuild_fail_count++;
break;
}
else if (Convert.ToInt32(Rebuild_Textbox_IP3.Text) > 255)
{
Rebuild_Textbox_IP3.Text = "";
MessageBox.Show("IP位址大於256");
Rebuild_fail_count++;
break;
}
else if (Convert.ToInt32(Rebuild_Textbox_IP4.Text) > 255)
{
Rebuild_Textbox_IP3.Text = "";
MessageBox.Show("IP位址大於256");
Rebuild_fail_count++;
break;
}
else
{
//這裡做成功以後的事情
break;
}
}

if (Rebuild_fail_count == 3)
{
MessageBox.Show("錯誤超過三次,請重新來過");
Application.Exit();
}

上面程式是我在Rebuild.Show可以達到我要的預期,
但因在Rebuild.ShowDialogt程式break後 就一直執行到最後一行了,這是我不知道如何修改的地方

本篇文章回覆於2017-11-02 13:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

春天
檢舉此回應
改成這樣,在未錯誤三次前不用break

本篇文章回覆於2017-11-02 18:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

阿剛
檢舉此回應
謝謝春天大大的回復

但若改成這樣的話


//在此修正錯誤的資訊
//Form f = new Form();
//f.ShowDialog();


等f.ShowDialog(); 結束後 while迴圈還是會繼續執行(使用這無法輸入),
先前我要break的目的就是為了跳出 錯誤訊息後,可以讓使用者再輸入訊息
所以這樣子改的話還是沒有解決我原先的問題

不知道我這樣的理解邏輯是否有誤,若有的話還請各位大大賜教
感激~
本篇文章回覆於2017-11-03 08:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

阿剛
檢舉此回應
--已自行解決--

方法是不在ShowDialog中做剩餘次數的判斷
在原本的Form做判斷即可,程式碼如下

Check_Config Function中檢查內容與這次無關,所以就沒貼上了





本篇文章回覆於2017-11-03 13:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.