2016-08-19 111 views
0

我希望能够将upperEncodedMsg传递到我的代码底部的msgLabel的text属性中。将方法中的变量传递给按钮单击事件

namespace ProgrammingAssignmentDecoder 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 


     } 

     public void Encode() 
     { 
      string message = Convert.ToString(messageTxt.Text); 
      char[] encodeArray = message.ToCharArray(); 

      for (int i = 0; i < encodeArray.Length; i++) 
      { 
       char letter = (encodeArray[i]); 

       switch (letter) 
       { 
        case 'a': 
        case 'A': 
         encodeArray[i] = 't'; 
         break; 
        case 'b': 
        case 'B': 
         encodeArray[i] = 'u'; 
         break; 
        case 'c': 
        case 'C': 
         encodeArray[i] = 'v'; 
         break; 
        case 'd': 
        case 'D': 
         encodeArray[i] = 'w'; 
         break; 
        case 'e': 
        case 'E': 
         encodeArray[i] = 'x'; 
         break; 
        case 'f': 
        case 'F': 
         encodeArray[i] = 'y'; 
         break; 
        case 'g': 
        case 'G': 
         encodeArray[i] = 'z'; 
         break; 
        case 'h': 
        case 'H': 
         encodeArray[i] = 'a'; 
         break; 
        case 'i': 
        case 'I': 
         encodeArray[i] = 'b'; 
         break; 
        case 'j': 
        case 'J': 
         encodeArray[i] = 'c'; 
         break; 
        case 'k': 
        case 'K': 
         encodeArray[i] = 'd'; 
         break; 
        case 'l': 
        case 'L': 
         encodeArray[i] = 'e'; 
         break; 
        case 'm': 
        case 'M': 
         encodeArray[i] = 'f'; 
         break; 
        case 'n': 
        case 'N': 
         encodeArray[i] = 'g'; 
         break; 
        case 'o': 
        case 'O': 
         encodeArray[i] = 'h'; 
         break; 
        case 'p': 
        case 'P': 
         encodeArray[i] = 'i'; 
         break; 
        case 'q': 
        case 'Q': 
         encodeArray[i] = 'j'; 
         break; 
        case 'r': 
        case 'R': 
         encodeArray[i] = 'k'; 
         break; 
        case 's': 
        case 'S': 
         encodeArray[i] = 'l'; 
         break; 
        case 't': 
        case 'T': 
         encodeArray[i] = 'm'; 
         break; 
        case 'u': 
        case 'U': 
         encodeArray[i] = 'n'; 
         break; 
        case 'v': 
        case 'V': 
         encodeArray[i] = 'o'; 
         break; 
        case 'w': 
        case 'W': 
         encodeArray[i] = 'p'; 
         break; 
        case 'x': 
        case 'X': 
         encodeArray[i] = 'q'; 
         break; 
        case 'y': 
        case 'Y': 
         encodeArray[i] = 'r'; 
         break; 
        case 'z': 
        case 'Z': 
         encodeArray[i] = 's'; 
         break; 



       } 




      } 

     } 

     static string upperEncoded(char[] encodeArray, string upperEncodedMsg) 
     { 
      string encodedMsg = new string(encodeArray); 
      upperEncodedMsg = encodedMsg.ToUpper(); 
      return upperEncodedMsg; 

     } 



     private void clearBtn_Click(object sender, EventArgs e) 
     { 
      messageTxt.Text = string.Empty; 
      msgLabel.Text = string.Empty; 
      processedMessageLabel.Text = "Processed Message: "; 

     } 

     private void encodeBtn_Click(object sender, EventArgs e) 
     { 
      Encode(); 

      if (messageTxt.TextLength == 0) 
      { 
       MessageBox.Show("There is no message to Encode"); 
      } 
      else 
      { 
       processedMessageLabel.Text = "Encoded Message: "; 
       msgLabel.Visible = true; 
      } 

      msgLabel.Text = upperEncodedMsg; 

     } 
    } 

} 
+2

是什么问题? –

+1

欢迎来到StackOverflow,我想你应该用你迄今为止已经尝试过的例子以及你期待的输出的例子来澄清你的问题。请参阅[如何提出问题。](http://stackoverflow.com/help/how-to-ask) – Marusyk

+0

它表示upperEncodedMsg当前未在当前使用 –

回答

0

我试图让你的结构在机智,有可能在更少的字符和不太复杂的方式做了一些事情,但你正在学习的语言实践中是可以改善的唯一的事情你技能:)这么好。

namespace ProgrammingAssignmentDecoder 
{ 

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private string upperEncodedMsg = null; 

    public void Encode() 
    { 
     string message = Convert.ToString(messageTxt.Text); 
     char[] encodeArray = message.ToCharArray(); 

     for (int i = 0; i < encodeArray.Length; i++) 
     { 
      char letter = (encodeArray[i]); 

      switch (letter) 
      { 
       case 'a': 
       case 'A': 
        encodeArray[i] = 't'; 
        break; 
       case 'b': 
       case 'B': 
        encodeArray[i] = 'u'; 
        break; 
       case 'c': 
       case 'C': 
        encodeArray[i] = 'v'; 
        break; 
       case 'd': 
       case 'D': 
        encodeArray[i] = 'w'; 
        break; 
       case 'e': 
       case 'E': 
        encodeArray[i] = 'x'; 
        break; 
       case 'f': 
       case 'F': 
        encodeArray[i] = 'y'; 
        break; 
       case 'g': 
       case 'G': 
        encodeArray[i] = 'z'; 
        break; 
       case 'h': 
       case 'H': 
        encodeArray[i] = 'a'; 
        break; 
       case 'i': 
       case 'I': 
        encodeArray[i] = 'b'; 
        break; 
       case 'j': 
       case 'J': 
        encodeArray[i] = 'c'; 
        break; 
       case 'k': 
       case 'K': 
        encodeArray[i] = 'd'; 
        break; 
       case 'l': 
       case 'L': 
        encodeArray[i] = 'e'; 
        break; 
       case 'm': 
       case 'M': 
        encodeArray[i] = 'f'; 
        break; 
       case 'n': 
       case 'N': 
        encodeArray[i] = 'g'; 
        break; 
       case 'o': 
       case 'O': 
        encodeArray[i] = 'h'; 
        break; 
       case 'p': 
       case 'P': 
        encodeArray[i] = 'i'; 
        break; 
       case 'q': 
       case 'Q': 
        encodeArray[i] = 'j'; 
        break; 
       case 'r': 
       case 'R': 
        encodeArray[i] = 'k'; 
        break; 
       case 's': 
       case 'S': 
        encodeArray[i] = 'l'; 
        break; 
       case 't': 
       case 'T': 
        encodeArray[i] = 'm'; 
        break; 
       case 'u': 
       case 'U': 
        encodeArray[i] = 'n'; 
        break; 
       case 'v': 
       case 'V': 
        encodeArray[i] = 'o'; 
        break; 
       case 'w': 
       case 'W': 
        encodeArray[i] = 'p'; 
        break; 
       case 'x': 
       case 'X': 
        encodeArray[i] = 'q'; 
        break; 
       case 'y': 
       case 'Y': 
        encodeArray[i] = 'r'; 
        break; 
       case 'z': 
       case 'Z': 
        encodeArray[i] = 's'; 
        break; 
      } 
     } 
     foreach (char eachChar in encodeArray) { 
      upperEncodedMsg += eachChar; 
     } 

    } 

    public void upperEncoded() 

    { 
     if (upperEncodedMsg != null) 
     { upperEncodedMsg = upperEncodedMsg.ToUpper(); } 

    } 



    private void clearBtn_Click(object sender, EventArgs e) 
    { 
     messageTxt.Text = string.Empty; 
     msgLabel.Text = string.Empty; 
     processedMessageLabel.Text = "Processed Message: "; 

    } 

    private void encodeBtn_Click(object sender, EventArgs e) 
    { 
     if (messageTxt.TextLength == 0) 
     { 
      MessageBox.Show("There is no message to Encode"); 
     } 
     else 
     { 
      Encode(); 
      upperEncoded(); 
      processedMessageLabel.Text = "Encoded Message: "; 
      msgLabel.Visible = true; 
     } 

     msgLabel.Text = upperEncodedMsg; 

    } 
} 

} 
+0

谢谢你的帮助,这工作。我只是想通过这个课,而且教授很残酷。 –

0

我下去使用创建映射的路线Dictionary<char, char>(见here for details on Dictionary),并简单地查找在字典中encodeArray每个字符的键值。使用StringBuilder而不仅仅是一个字符串来存储编码的消息也可能更好。

创建映射

//Add Dictionary at the top of the class along with upperEncodedMsg string. 
private Dictionary<char, char> charMapping; 
private StringBuilder upperEncodedMsg; 

//Create mappings. Use uppercase values here and you won't need to use your 'upperEncoded' method. This bit can be done in your Form1 constructor. 

public Form1() 
{ 
    InitializeComponent(); 

    charMapping = new Dictionary<char, char>(); 
    charMapping.Add('A', 'T'); 
    charMapping.Add('B', 'U'); 

    //more mappings... 
} 

然后你可以删除你有大switch语句,并替换为以下:

public void Encode() 
{ 
    upperEncodedMsg = new StringBuilder(); 
    string message = Convert.ToString(messageTxt.Text); 
    char[] encodeArray = message.ToUpper().ToCharArray(); 

    for(int i = 0; i < encodeArray.Length; i++) 
    { 
     //Use the mappings created earlier to get the associated char. 
     char outputLetter; 
     charMapping.TryGetValue(encodeArray[i], out outputLetter); 

     //Append letter to your upperEncodedMsg StringBuilder.   
     upperEncodedMsg.Append(outputLetter); 
    } 
} 

在你按一下按钮,在底部,你可以再加:

private void encodeBtn_Click(object sender, EventArgs e) 
{ 
    //your code... 

    msgLabel.Text = upperEncodedMsg.ToString(); 
} 

主要优点这样做是因为您的映射可以在您的代码的其他部分提供。它还使维护变得更容易,并且只要表单正在加载映射,而不是等待调用编码方法。查找字典也可能比大型开关语句更快。