台灣最大程式設計社群網站
線上人數
1770
 
會員總數:241166
討論主題:186825
歡迎您免費加入會員
討論區列表 >> VB.NET >> Class裡的Timer無法顯示Form1標題文字
[ 變換順序 ]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Class裡的Timer無法顯示Form1標題文字
價值 : 50 QP  點閱數:256 回應數:24

樓主

city
初學者
30 24
592 153
發送站內信

請教各位前輩:


剛剛把以前寫的鬧鐘程式 想用物件導向(Class)的方式重寫一遍
結果發現..Class裡的虛擬Timer居然無法控制Form的Text(標題文字)???

老實說..很出乎我的意料
(原本想說一定沒問題的)

附上簡化後的程式碼:



上面程式碼執行後
Form1的Text沒反應
卻一直跳出MsgBox視窗(顯示Now)

代表程式碼有執行到:Form1.Text = Now
可是FormText卻沒沒反應

有高人可以解釋原因嗎?

謝謝

搜尋相關Tags的文章: [ Class ] , [ Timer ] , [ Form1 ] , [ 標題文字 ] ,
本篇文章發表於2017-11-09 12:32
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

city
檢舉此回應
另外:

這應該算[問題2]

我知道Class1直接設定Form1.Text這樣的方式不太好(還蠻暴力的...)

有其它比較正統或微軟推薦的方式嗎?
本篇文章回覆於2017-11-09 12:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

city
檢舉此回應
抓到Bug了

原來要改成:
Dim tm As New System.Windows.Forms.Timer
AddHandler tm.Tick, AddressOf TimerTick

都怪微軟 搞那麼多Timer幹嘛 哈哈

那...問題2照舊..哈哈
本篇文章回覆於2017-11-09 15:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

誰是誰
檢舉此回應
這不是 Bug, 這是因為你不了解
(1) Timers.Timer 和 Forms.Timer 有甚麼不同
(2) Form 在 VB 下的使用有何特殊之處
本篇文章回覆於2017-11-09 16:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

city
檢舉此回應
To:誰是誰

1.
沒用過System.Timers.Timer
應該說是根本不知道有System.Timers.Timer這個東西..哈

原來是用錯Timer 難怪我在打Timer.的時候沒出現Tick事件 只出現Elapsed事件

2.
之前好像有看過Form是比較特殊的Class
讀取Form內的變數 函式 元件 ... 不需要用New
不過現在上網查 好像查不太到
大大可否提供查詢關鍵字?
Thanks
本篇文章回覆於2017-11-09 18:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

誰是誰
檢舉此回應
這是一個編譯器的擴展行為,並非不需要建立 Instance。
本篇文章回覆於2017-11-09 19:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

誰是誰
檢舉此回應


https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/objects/my-forms-object

最基本最基本,要搞懂這是甚麼東西。
本篇文章回覆於2017-11-09 19:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

city
檢舉此回應
To:誰是誰

還是不太懂...
(英文網站是用Google翻譯來看..)

我測了一下:
My.Forms.之後 出現的是專案裡的全部Form

大大提供My.Forms的用意是解決哪部份的問題?

我有試一下:
Class裡面可以使用My.Forms來修改Form1的Text
如下:



不知道這是否大大的原意?
(Class使用My.Form來修改Form)


而:[Form在VB下的使用有何特殊之處]
這個跟My.Forms有關連嗎?

感覺Form有點介於Class與Module之間

Class與Class Form的差異
這個我在網路上一直查不到...
本篇文章回覆於2017-11-09 22:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

羅伯斯
檢舉此回應
to:樓主
觀察樓主在論壇所提一系列的問題,其根源就在樓主對物件導向,處於一知半解的狀態
尤其樓主總是用程式導向的觀念來思考問題,而不是以物件導向的觀念去思考問題
程式導向與物件導向,兩者在觀念上,有極為不同的差異,若不能從最基礎的物件導向學習
就好比是蓋高樓,狺ㄖ潀a基打好一樣,那蓋好的高樓,也只是虛有其表,很容易倒塌的
學習任何的程式語言,絶對沒有所謂的捷徑,只有具備堅實的基礎,才能獲得更高層面的技巧
本篇文章回覆於2017-11-10 16:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

誰是誰
檢舉此回應
VB 中 Class (就稱他為 "一般的 Class" 吧) 和 Module 對應 C# 就是 Class 和 Static Class
也就是說,在編譯後的狀態 Module 就是個"靜態類別"
Form 就是個 Class (一般的 Class),沒有甚麼介於 Class 和 Module 這種說法。
為什麼我要提 My.Forms,因為用你的程式碼當例子,你所寫的 Form1.Text = ... ,事實上編譯成 My.Forms.Form1.Text = ....
所以這是探索此問題的基本,也是探索的起點。
本篇文章回覆於2017-11-10 18:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
不錯的參考

P陳
檢舉此回應

1.另一種寫法
withevents tm as new timer
<--這樣就不用 AddHandler tm.Tick, AddressOf TimerTick
元件的方法中就有 tm.tick 可選了

2.在還不熟悉運作之前,建議用 工具箱的 Timer

3.您在tick 中放入 msgbox () <-- 強制顯示了,就沒有往下的動作了

4.前輩的話聽後要仔細想一下,可以少走很多路....... (尤其物件導向觀念 有點不好進入)

5.以下這樣就可以跑了


本篇文章回覆於2017-11-11 10:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

P陳
檢舉此回應
這個題目不算是初級的了
有進步了,加油

知道你的問題點了,以下試看看是否所需




本篇文章回覆於2017-11-11 10:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

P陳
檢舉此回應
至於您的沒有出現 問題
'這個沒出現
Form1.Text = Now

--> 加這個就可以了 原因請想一下,期待你的說明
application.doevents

'這個有出現
MsgBox(Now, MsgBoxStyle.OkOnly, " ")
本篇文章回覆於2017-11-11 10:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

P陳
檢舉此回應

我再試了一次,不用加 application.doevents 也會顯示,修正 #12 的回文
本篇文章回覆於2017-11-11 11:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

P陳
檢舉此回應

我再試了一次,不用加 application.doevents 也會顯示,修正 #12 的回文
本篇文章回覆於2017-11-11 11:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
作者回應

city
檢舉此回應
To:羅伯斯

[一]
物件導向是這兩三個月才開始接觸的
之前都直接寫在元件事件中(例如:Button_Click)
共用變數及副程式寫在模組
應該算是程式導向

其實程式導向也沒什麼錯
反而比較貼近程式的精神
以前的GWBasic 程式碼要寫10 20 30 ...
從上到下的程式碼+判斷(if..Select Case..)+迴圈(Do..While..)是我認為最原汁原味的程式精神(個人認為)

而後來有了副程式 函式
更是如虎添翼 省卻了不少重複的程式碼

而後來的物件導向
個人是認為這已經有點不太像寫程式了
原本簡單好懂得程式碼 變成了一個一個的Class球 丟來丟去

當然 我對於物件導向還沒很了解 所以也不便多說什麼


[二]
有看JAVA的書 裡面有說物件導向之所以發揚光大 有很大部分是跟JAVA有關
JAVA主要是寫網路的
因此個人在想:是否物件導向 主要是網路在用的?
因為網路有使用者端 主機端 很常需要把資料丟來丟去
當然 單機版電腦應用程式也可以用物件導向
But 物件導向主要還是為網路應運而生?
當然 這也是個人猜測


[三]
有翻過F#的書 前言大約是:物件導向經過幾十年發展 已有些不敷使用
而下一代的解決方法 是函式導向 而F#還結合物件 所以是函式物件導向
F#也是微軟下一代重量級程式語言

我看了這本書 大約是8-9年前出版的
目前業界也不知道有沒有人在用F# 或是函式導向
只是目前書局 很少F#的書 想必也沒很火紅
不知道是不是廠商自己在吹牛的? 哈

附上有關F#的網頁
不過也是2008年的網頁了
F# : 微軟下一代重量級語言


[四]
如果之後物件導向真的被推翻了
那之前寫的成千成百的Class物件 或類別庫
不就成了垃圾了??
(只能用Ctrl+C Ctrl+V把裡面需要的程式碼複製出來)


[五]
[若不能從最基礎的物件導向學習,就好比是蓋高樓,狺ㄖ潀a基打好一樣,那蓋好的高樓,也只是虛有其表,很容易倒塌的]
個人在想:
物件導向真的是程式的基礎嗎?
個人倒是覺得 物件導向只是現階段解決問題的一種方法 而這種方法 未來有可能會被取代的
基礎反而是傳統的程式導向 以及資料結構 演算法 計算機概論 資料庫 ...
物件導向比較像是程式導向的變種
把程式導向重新切割 包裝成Class
並加上自己的東西:繼承 介面 ...

當然 以上都只是個人觀點 哈


[六]
目前還是物件導向稱王
所以還是乖乖的學物件導向 哈哈
本篇文章回覆於2017-11-11 13:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   

回覆
如要回應,請先登入.