2017-04-17 53 views
0

我正在使用C#,並且我的GUI程序中有一個加載按鈕,它不會提示用戶提前保存數據加載一個新的。我怎樣才能讓提示信息正確顯示?數據按我的意思正確加載,但對話框消息未顯示。C#加載對話框(無法加載,但當它的時候,它的動作不起作用)

這是我的代碼部分:

private bool dirtyText; 
private bool dirtyFilename; 

#region load 


//================================ 
//  LOAD  
//================================ 

private void loadFile() 
{ 
    try 
    { 
     textBox.Text = File.ReadAllText(fileName.Text); 
     dirtyText = false; 
     dirtyFileName = false; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Load failed: " + ex.Message); 
    } 
} 

//================================ 
//  LOAD  - actual code to load files 
//================================ 

private void load_Click(object sender, EventArgs e) 
{ 
    if (dirtyFileName) 
    { 
     DialogResult result = MessageBox.Show("Your data have not been saved yet. Would you like to save them before loading?", "Unchanged data", MessageBoxButtons.YesNoCancel); 

     switch (result) 
     { 
      case DialogResult.Yes: 
       File.WriteAllText(fileName.Text, " "); 
       loadFile(); 
       break; 
      case DialogResult.No: 
       loadFile(); 
       break; 
      case DialogResult.Cancel: 
       break; 
     } 
    } 
    else 
    { 
     loadFile(); 
    } 
} 

#endregion 

下圖顯示了你,我想看看當我點擊加載什麼。

enter image description here

而且快速說明:我所做的對話框工作然而,通過去除整個代碼塊,其中包括從switch語句中的if語句和擺脫if-else語句的;但是這樣做會渲染對話框中的所有按鈕都是無效的。保存不保存文件,加載刪除文本和取消,呃...取消只是做它最擅長的:取消操作。從技術上講,重要的按鈕是無用的。

我希望我能得到解決方案。欣賞它。

+0

您在'load_Click'中的條件錯誤請使用'if(!dirtyFileName)'而不是'if(dirtyFileName)' –

+0

在你顯示的代碼中,'dirtyFileName'總是'false',所以'DialogResult '代碼將永遠不會執行 –

+0

我爲我的dirtyFileName和我的dirtyText指定了一個bool值,而我在它上面並且它工作正常。感謝你們!我很感激! :D – crhodes

回答

1

如果你只是刪除檢查的dirtyFileName(它總是假的在你的例子),它應該工作:

private void load_Click(object sender, EventArgs e) 
{ 
    DialogResult result = MessageBox.Show("Your data have not been saved yet. Would you like to save them before loading?", "Unchanged data", MessageBoxButtons.YesNoCancel); 

    switch (result) 
    { 
     case DialogResult.Yes: 
      File.WriteAllText(fileName.Text, " "); 
      loadFile(); 
      break; 
     case DialogResult.No: 
      loadFile(); 
      break; 
     case DialogResult.Cancel: 
      break; 
    } 
} 

但是它會是一個更好的主意overthink爲什麼你從來沒有分配dirtyFileName,作爲提示現在顯示在alwyays。

+0

我爲我的dirtyFileName和我的dirtyText分配了一個bool值,而我在它和它的工作。感謝你們!我很感激! :d – crhodes

相關問題