2017-09-16 124 views
-1

以下代碼片段讀取.txt文件並讀取以代碼中聲明的字符開頭的某一行。C#縮短重複數據流讀取器

private void rb_point1_CheckedChanged(object sender, EventArgs e) 
    { 

     string line; 

     StreamReader file = new StreamReader(ccpath); 
     while ((line = file.ReadLine()) != null) 
     { 
      if (line.StartsWith("point01:")) 
      { 
       message = (line.Split(':')[1]); 
       txtb_message.Text = message; 
      } 
     } 
    } 
    private void rb_point2_CheckedChanged(object sender, EventArgs e) 
    { 

     string line; 

     StreamReader file = new StreamReader(ccpath); 
     while ((line = file.ReadLine()) != null) 
     { 
      if (line.StartsWith("point02:")) 
      { 
       message = (line.Split(':')[1]); 
       txtb_message.Text = message; 
      } 
     } 
    } 
    private void rb_point3_CheckedChanged(object sender, EventArgs e) 
    { 

     string line; 

     StreamReader file = new StreamReader(ccpath); 
     while ((line = file.ReadLine()) != null) 
     { 
      if (line.StartsWith("point03:")) 
      { 
       message = (line.Split(':')[1]); 
       txtb_message.Text = message; 
      } 
     } 
    } 
    private void rb_point4_CheckedChanged(object sender, EventArgs e) 
    { 

     string line; 

     StreamReader file = new StreamReader(ccpath); 
     while ((line = file.ReadLine()) != null) 
     { 
      if (line.StartsWith("point04:")) 
      { 
       message = (line.Split(':')[1]); 
       txtb_message.Text = message; 
      } 
     } 
    } 
    private void rb_point5_CheckedChanged(object sender, EventArgs e) 
    { 

     string line; 

     StreamReader file = new StreamReader(ccpath); 
     while ((line = file.ReadLine()) != null) 
     { 
      if (line.StartsWith("point05:")) 
      { 
       message = (line.Split(':')[1]); 
       txtb_message.Text = message; 
      } 
     } 
    } 

我的問題是,我有50個單選按鈕,這意味着這個代碼需要重複50次。我沒有想法如何縮短這個或至少讓眼睛更容易

回答

1

第一個改進將是一個方法,它可以做你想做的事,並接受一個差異的參數。像這樣:

private void rb_point1_CheckedChanged(object sender, EventArgs e) 
{ 
    ReadLineAndDisplayText("point01:"); 
} 

private void ReadLineAndDisplayText(string lineStart) 
{ 
    string line; 

    StreamReader file = new StreamReader(ccpath); 
    while ((line = file.ReadLine()) != null) 
    { 
     if (line.StartsWith(lineStart)) 
     { 
      message = (line.Split(':')[1]); 
      txtb_message.Text = message; 
     } 
    } 
} 

就像你已經擺脫了大多數重複。

接下來是爲每個單選按鈕沒有新的rb_point1_CheckedChanged()方法,但將相同的方法分配給所有按鈕。然後,您可以使用sender來識別按下的單選按鈕。在設計師中,你可以分配Tag,所以你的代碼是這樣的:

private void anyRadioButton_CheckedChanged(object sender, EventArgs e) 
{ 
    RadioButton radio = (RadioButton) sender; 
    string lineStart = (string) radio.Tag; 
    ReadLineAndDisplayText(lineStart); 
} 

就像你將只有2種方法結束。

+0

nvm,我只是俯視的東西。 –