iT邦幫忙

0

C# Visual studio Winform 基本問題

  • 分享至 

  • xImage

我目前建立了這個簡單的表https://ithelp.ithome.com.tw/upload/images/20220630/201499547euRDV0Tt2.png
程式如下
https://ithelp.ithome.com.tw/upload/images/20220630/20149954pENMaXB65U.png
public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
      
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Thread.Sleep(1000);
        textBox1.Text = "3";
     
        Thread.Sleep(1000);
        textBox1.Text = "5";
    }

    private void button2_Click(object sender, EventArgs e)
    {
        //Class1 obj = new Class1(this);
        // obj.CreateLabels();

        Thread.Sleep(1000);
        textBox1.Text = "2";
    }

   
}

我想要搭配延遲方式 按一下 button1 可以讓textbox1 一開始顯示 3 過一秒後顯示 5,
但實驗發現它只會顯示 5

但如果我使用 button2 卻可以讓它變成顯示 2

我不太懂是哪個原理導致,它的 textbox1.text無法 在一顆按鍵下被改變,
必須要換一個按鍵的上才能做到

是不是有什麼步驟要再加上去的,還是說是什麼原理我必須先去了解,C#新手還請各位高手指教

看更多先前的討論...收起先前的討論...
雖然我對C#不是很了解。

但就任何程式語法而言。sleep正常是會拖長執行時間而已。
但並不一定會去渲染畫面。
只會在運行結束後渲染。

不過就像我說的,我對C#不是很熟。還麻煩相關C#的高手來回答你正確答案。
但如果沒意外,我記得是要用類似計時器的東西就是了。
不過我不會寫。
canrong iT邦新手 3 級 ‧ 2022-06-30 13:41:27 檢舉
你的form在邏輯途中並沒有被刷新
canrong iT邦新手 3 級 ‧ 2022-06-30 13:58:42 檢舉
我只有寫過一兩次的winform,事件驅動的刷新可以使用this.Refresh();
如果使用計時器要去判斷IP.InvokeRequired並且使用this.Invoke();不然form刷新邏輯會失效,timer邏輯途中需要刷新視窗依舊要自己主動Refresh。
寫winform要稍微了解一下執行緒,以及一些form開發的小陷阱。
s82910g iT邦新手 5 級 ‧ 2022-07-01 12:06:15 檢舉
感謝
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-06-30 17:20:14
最佳解答

要延時改變 TextBox 文字
用不到 Thread
有點殺雞用牛刀的感覺

要寫樂透
可以先用 Timer 就好
又簡單又不會錯
參考官網 Timer 教學

我要發表回答

立即登入回答