iT邦幫忙

0

C#入門問題

大家安 最近才開始學程式設計
這作業的其中一個目標是做出一個按鈕讓兩個label的內容互換
我選擇用temp存一個字串 想要藉此交換兩個label的內容
按幾下還沒問題 多按幾下就會有"System.windows.Forms.label, Text"的內容出現
我記得這段應該是在指定的label沒有訊息時才會出現的 所以有點不解
希望有人能幫我解惑下
感謝
https://ithelp.ithome.com.tw/upload/images/20181003/20112170d0wtPf1rxI.png

public partial class Form1 : Form
{
    string temp = "日期:" + DateTime.Now.ToLongDateString();
    public Form1()
    {
        InitializeComponent();
    }
    private void label1_Click(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        label1.Text = "日期:" + DateTime.Now.ToLongDateString();
        label2.Text = "時間:" + DateTime.Now.ToLongTimeString();
        label3.Text = "起來嗨";
    }
    private void button2_Click(object sender, EventArgs e)
    {
        label1.Text = label2.ToString();
        label2.Text = temp;
        temp = label1.ToString();
    }
}        
testh iT邦新手 4 級 ‧ 2018-10-03 04:30:13 檢舉
大概
label1.tostring()
改.text

2 個回答

0
froce
iT邦高手 1 級 ‧ 2018-10-03 04:49:06
最佳解答
private void button2_Click(object sender, EventArgs e)
    {
        label1.Text = label2.ToString();
        label2.Text = temp;
        temp = label1.ToString();
    }

1.前面是物件label1的Text屬性,後面是label2物件直接轉string。
2.temp的scope也錯了,沒必要不要用全域變數。上面的var temp不用。

private void button2_Click(object sender, EventArgs e)
    {
        var temp = label1.Text
        label1.Text = label2.Text;
        label2.Text = temp;
    }
h564564 iT邦新手 5 級 ‧ 2018-10-03 11:31:41 檢舉

改成text就可以了 感謝/images/emoticon/emoticon07.gif
另外問一下 全域變數少用的原因是?

froce iT邦高手 1 級 ‧ 2018-10-03 12:42:26 檢舉

以你的例子為例,你把temp放在全域,實際上你要的功能,temp只需要在區域做就行。
那程式在執行區域完後,temp用不到了,或許有機會被做記憶體回收。
但放在全域呢?他會跟著程式從生到死。

另外程式如果一大起來,你變數都放全域,有些像temp這種常用的,你是不是還要去找其他名稱,來避免變數名稱重複?

有時候程式複雜起來,好幾十個function會需要存取這個全域變數,像temp這種又要讀又要寫的,很容易變成非預期的結果。

全域變數依我自己的習慣是盡量不要用,要不然就是盡量不要去變他。
能精準的控制變數生死,不會誤用,才是穩健的程式。

h564564 iT邦新手 5 級 ‧ 2018-10-03 21:53:37 檢舉

了解了 感謝/images/emoticon/emoticon12.gif

0
小魚
iT邦高手 1 級 ‧ 2018-10-02 22:21:29

1.什麼額外的內容

2.建議貼程式碼, 不要截圖

h564564 iT邦新手 5 級 ‧ 2018-10-03 01:51:26 檢舉

剛更新內文 給的資訊應該比較充足了 /images/emoticon/emoticon02.gif

小魚 iT邦高手 1 級 ‧ 2018-10-03 08:02:51 檢舉

對, 沒注意到, 有人回答了

temp = label1.ToString();

改成

temp = label1.Text;

應該就可以了

h564564 iT邦新手 5 級 ‧ 2018-10-03 10:55:00 檢舉

我直接轉成字串才會多出那訊息 改掉後就可以了 感謝~

我要發表回答

立即登入回答