2013-01-24 57 views
0

我正在製作一個小工具。我只想知道下面的代碼中的switch是否是實現此目的的最快/最好的方法?在PHP中,我引用變量名動態喜歡$Stop{int Stop} -> $BackColor = "Color"TextBox.Text [1 | 2] - > PictureBox {1 | 2} .Color = SomeColor?

CSSGM

public void Populate(Color Color, int Stop) 
{ 
    Colour.BackColor = Color;    // Bottom left - PictureBox 
    Hex.Text = ARGBToHex(Color.ToArgb()); // Hex (#703919) - TextBox 
    Red.Text = Color.R.ToString();  // Red (153) - TextBox 
    Green.Text = Color.G.ToString();  // Green (180) - TextBox 
    Blue.Text = Color.B.ToString();  // Blue (209) - TextBox 
    Alpha.Text = "100";     // Alpha (100) - TextBox 
    StopText.Text = Stop.ToString();  // Read-only (1) - TextBox 
    switch(Convert.ToInt16(StopText.Text)) 
    { 
     case 1: Stop1.BackColor = Color; break; // Small light blue rectangle - PictureBox 
     case 2: Stop2.BackColor = Color; break; // Small dark blue rectangle - PictureBox 
    } 
} 
+0

那你想幹什麼?假設C#世界中的每個人都知道PHP是一種不好的做法。請儘可能具體。 – Neolisk

+0

我不是100%確定你在問什麼。 –

+0

有沒有一種方法可以根據類型爲「int」的文本框的內容動態地引用表單元素,而不是使用「switch」? –

回答

3

你可以這樣做:

this.Controls.OfType<PictureBox>().First(x => x.Name.EndsWith(StopText.Text)).BackColor = Color; 
+0

聽起來像是爲了這個目的使用LINQ的矯枉過正。但爲了你的勇氣+1。 – Neolisk

+0

@Neilisk我只是想深入研究C#,看看是否有更好的方式做事。顯然,只有2站時,使用「開關」更容易。但是我想知道爲了擴展性和拓寬我的C#知識。感謝西蒙! –

+0

@Neolisk真的,但它至少可以擴展:) –

0

而不是

StopText.Text = Stop.ToString(); 
switch(Convert.ToInt16(StopText.Text)) 
{ 
    case 1: Stop1.BackColor = Color; break; 
    case 2: Stop2.BackColor = Color; break; 
} 

爲什麼不

//have an array of 2 Stops called Stops 
StopText.Text = Stop.ToString(); 
if (Stop < Stops.Length) 
{ 
    Stops[Stop].BackColor = Color; 
} 

(並確保你一致地使用0或1索引,等等)

+0

'Stop1'和'Stop2'是小長方形的'PictureBox'。我如何適應數組? –

+0

'PictureBox []停止=新的PictureBox [2];停止[0] =(在此處插入第一個PictureBox);停止[1] =(在這裏插入第二個PictureBox);'? – Patashu

1

你可以真正使您的生活更輕鬆,如果你重新排序分配的順序,特別是StopText.TextStopX.BackColor

然後改變您的使用情況,並通過一個圖片,而不是毫無意義的數量(1或2):

public void Populate(Color Color, PictureBox Stop) 
{ 
    Colour.BackColor = Color;    // Bottom left - PictureBox 
    Hex.Text = ARGBToHex(Color.ToArgb()); // Hex (#703919) - TextBox 
    Red.Text = Color.R.ToString();  // Red (153) - TextBox 
    Green.Text = Color.G.ToString();  // Green (180) - TextBox 
    Blue.Text = Color.B.ToString();  // Blue (209) - TextBox 
    Alpha.Text = "100";     // Alpha (100) - TextBox 

    Stop.BackColor = Color; 
    StopText.Text = Stop.Name.Substring(Stop.Name.Length - 1, 1) 
} 
+0

這聽起來像一個很好這樣做的方式,但停止文本框是必需的,否則我怎麼知道當我玩這些值的時候我正在修改哪個站點?這就是說,它只是推動問題跟蹤所選的停車#在一個額外的變量。 –

+0

@DannyBeckett:如果你很需要TextBox,你可以根據Stop的名字賦值。看我的編輯。 – Neolisk