Discussion:
[問題] 請問一個關於控制項操作的問題
(时间太久无法回复)
天劍流星
2005-04-03 09:05:17 UTC
Permalink
例如我在form上放了一個ProgressBar控制項,叫progressBar1,
另外還有一個按鈕叫buttom1。

問題來了,我在buttom1的click事件裡,可以自由地用
progrssBar1.Increment(value)等動作來控制該progressbar,

但如果我自己另外寫其他的class或function,然後在裡面就無法如上使用了。
一用的話,就會出錯,錯誤訊息是:
'WindowsApplication1.Form1.progressBar1' 代表 '欄位',但是必須是 '類別'

我想應該不是progressbar的問題,可能其他的控制項,都會有這個問題,
請問有沒有人到底錯在哪呢?

ps.其實總結就是,c#中,在自訂類別或函式裡,想操作控制項,該怎麼做?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.174.150.118
→ Eric30:所謂"另外寫"是怎麼個寫法?  140.113.138.30 04/04
待救的小米
2005-04-03 08:55:44 UTC
Permalink
我看起來的感覺
你好像沒抓到Form1的實體? (instance of Form1)
如果是用Form1的instance 他裡面的每個控制項應該都是能夠操作的
當然 要是public的才行


※ 引述《diamondking (天劍流星)》之銘言:
: 例如我在form上放了一個ProgressBar控制項,叫progressBar1,
: 另外還有一個按鈕叫buttom1。
: 問題來了,我在buttom1的click事件裡,可以自由地用
: progrssBar1.Increment(value)等動作來控制該progressbar,
: 但如果我自己另外寫其他的class或function,然後在裡面就無法如上使用了。
: 一用的話,就會出錯,錯誤訊息是:
: 'WindowsApplication1.Form1.progressBar1' 代表 '欄位',但是必須是 '類別'
: 我想應該不是progressbar的問題,可能其他的控制項,都會有這個問題,
: 請問有沒有人到底錯在哪呢?
: ps.其實總結就是,c#中,在自訂類別或函式裡,想操作控制項,該怎麼做?

--
生物資訊研究室:每天都會更新文件,提供生物資訊教學,生物字典。

http://www.bioinformatic.idv.tw

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.73.177
eric
2005-04-03 09:17:03 UTC
Permalink
※ 引述《diamondking (天劍流星)》之銘言:
: 例如我在form上放了一個ProgressBar控制項,叫progressBar1,
: 另外還有一個按鈕叫buttom1。
: 問題來了,我在buttom1的click事件裡,可以自由地用
: progrssBar1.Increment(value)等動作來控制該progressbar,
: 但如果我自己另外寫其他的class或function,然後在裡面就無法如上使用了。
: 一用的話,就會出錯,錯誤訊息是:
: 'WindowsApplication1.Form1.progressBar1' 代表 '欄位',但是必須是 '類別'
: 我想應該不是progressbar的問題,可能其他的控制項,都會有這個問題,
: 請問有沒有人到底錯在哪呢?
: ps.其實總結就是,c#中,在自訂類別或函式裡,想操作控制項,該怎麼做?
^^^^^^^^^^^^^^ ^^^^^^^^^^

您的問題是

現在有個類別叫class1

另外你又寫了個類別叫class2

你想要在class2的函式中使用class1中的控制項

是這樣嗎?@@

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.138.30
tomex_ou
2005-04-03 15:07:01 UTC
Permalink
※ 引述《Eric30 (eric)》之銘言:
: 您的問題是
: 現在有個類別叫class1
: 另外你又寫了個類別叫class2
: 你想要在class2的函式中使用class1中的控制項
: 是這樣嗎?@@

應該如你所推說的,
簡單的作法就是把class1的控制項當作參數傳入class2
如:
class1.buttom1.Text = "hello";
string s = class2.Increate(class1.buttom1, "world");

--
貫徹分享精神
我為人人,人人為我

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.119.183.211
天劍流星
2005-04-04 02:25:53 UTC
Permalink
※ 引述《tomex (tomex_ou)》之銘言:
: ※ 引述《Eric30 (eric)》之銘言:
: : 您的問題是
: : 現在有個類別叫class1
: : 另外你又寫了個類別叫class2
: : 你想要在class2的函式中使用class1中的控制項
: : 是這樣嗎?@@
: 應該如你所推說的,
: 簡單的作法就是把class1的控制項當作參數傳入class2
: 如:
: class1.buttom1.Text = "hello";
: string s = class2.Increate(class1.buttom1, "world");


呃,有點像這樣,我也猜是命名空間的問題,我說詳細一點好了:

今天我開個新的c#視窗應用程式專案,上面放一個buttom與progressBar。
所以目前共有三個元件。(Form1,buttom1,progressBar1)

我在buttom1的click事件函式裡,的確可以自由操作progressBar1,
例如我想當使用者按下buttom1,progressBar就馬上跑到一半的長度。

問題來了,當我另外寫了一個class,想在class的method裡,同樣如上操作,
就會出錯了。

我想最大的原因可能是,buttom1的click事件,有跟form1串在一起,
所以他抓得到progressBar1物件在哪裡,自然就能操作它。
但我自己另外寫的class中,該怎麼操作我放在視窗上的其他元件呢?

希望這樣解釋,有比較清楚^^"


ps.我改成「form1.progressBar1.某方法」,這樣還是不行@@"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.174.148.130
※ 編輯: diamondking 來自: 218.174.148.130 (04/04 18:25)
※ 編輯: diamondking 來自: 218.174.148.130 (04/04 18:25)
一天一點愛戀
2005-04-04 10:26:49 UTC
Permalink
※ 引述《diamondking (天劍流星)》之銘言:
: ※ 引述《tomex (tomex_ou)》之銘言:
: : 應該如你所推說的,
: : 簡單的作法就是把class1的控制項當作參數傳入class2
: : 如:
: : class1.buttom1.Text = "hello";
: : string s = class2.Increate(class1.buttom1, "world");
: 呃,有點像這樣,我也猜是命名空間的問題,我說詳細一點好了:
: 今天我開個新的c#視窗應用程式專案,上面放一個buttom與progressBar。
: 所以目前共有三個元件。(Form1,buttom1,progressBar1)
: 我在buttom1的click事件函式裡,的確可以自由操作progressBar1,
: 例如我想當使用者按下buttom1,progressBar就馬上跑到一半的長度。
: 問題來了,當我另外寫了一個class,想在class的method裡,同樣如上操作,
: 就會出錯了。
: 我想最大的原因可能是,buttom1的click事件,有跟form1串在一起,
: 所以他抓得到progressBar1物件在哪裡,自然就能操作它。
: 但我自己另外寫的class中,該怎麼操作我放在視窗上的其他元件呢?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: 希望這樣解釋,有比較清楚^^"
: ps.我改成「form1.progressBar1.某方法」,這樣還是不行@@"

恩 這也才是小弟我想要問的問題...
我們的問題應該很像:
我已經寫好一個class A 裡面已經建好adapter和一個能傳出Dataset ds的方法
然後在public class Form1裡new了這個物件obj a,
在public void Form1_Load的地方結合到datagrid上了
然後弄了一個updata button ,在click事件裡希望以
"a.adapter.Update(ds,ds.Table[0].TableName); "
的方式來完成update...

但是我執行時 更動datagrid的資料後按update button 卻出現以下錯誤:
"System.NullReferenceException: 並未將物件參考設定為物件的執行個體"

請問究竟是什麼問題呢? 看不是很懂 @@..

懇請高手提供解決方案 謝謝!

--

心還在 人去了
回首一片 風雨飄搖....

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.205.18
perturbed seed
2005-04-04 11:41:35 UTC
Permalink
※ 引述《hmk (一天一點愛戀)》之銘言:
: 恩 這也才是小弟我想要問的問題...
: 我們的問題應該很像:
: 我已經寫好一個class A 裡面已經建好adapter和一個能傳出Dataset ds的方法
: 然後在public class Form1裡new了這個物件obj a,
: 在public void Form1_Load的地方結合到datagrid上了

問題可能出在這裡,
Compiler可以過,表示已經有在Form1裡,宣告了一個Form1內都認識的classA a;
可能你在Form1_Load用下列這種方式連結物件
public void Form1_Load(....)
{
classA a=new classA();
}
在Form1_Load裡,宣告了一個同名變數,它life cycle只有在Form1_Load裡,
離開後就被GC回收了。

如果是這樣,將 "classA a=new classA();" 改成 "a=new classA();"就可了。

--
 ˋ│ˊ ˊ
一 今 ─┬─ ┌──┐ ‧ 一 今 ┼┼┼ ┼┐ˋ ┼
心 ─┼─ 口 , 心 土 │ ┤三 │
人 土 └──┘ ╯口 人


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.10.250
天劍流星
2005-04-05 03:40:39 UTC
Permalink
: ※ 引述《tomex (tomex_ou)》之銘言:
: : 應該如你所推說的,
: : 簡單的作法就是把class1的控制項當作參數傳入class2
: : 如:
: : class1.buttom1.Text = "hello";
: : string s = class2.Increate(class1.buttom1, "world");
: 今天我開個新的c#視窗應用程式專案,上面放一個buttom與progressBar。
: 所以目前共有三個元件。(Form1,buttom1,progressBar1)
: 我在buttom1的click事件函式裡,的確可以自由操作progressBar1,
: 例如我想當使用者按下buttom1,progressBar就馬上跑到一半的長度。
: 問題來了,當我另外寫了一個class,想在class的method裡,同樣如上操作,
: 就會出錯了。
: 我想最大的原因可能是,buttom1的click事件,有跟form1串在一起,
: 所以他抓得到progressBar1物件在哪裡,自然就能操作它。
: 但我自己另外寫的class中,該怎麼操作我放在視窗上的其他元件呢?
: 希望這樣解釋,有比較清楚^^"
: ps.我改成「form1.progressBar1.某方法」,這樣還是不行@@
: 推 Eric30:@@a Tomex版大的做法不是您要的嗎 140.113.138.30 04/04

呃…看不太懂說…
Tomex大大是寫:string s=class2.Increat(class1.button1,"world")
不過我放在form1上的元件是ProgressBar,並沒有能讓別人引用的函式…
所以我在自己寫的class1中,搞不清楚怎麼操作它…
直覺應該是類似:form1.progressBar1.Minimun這樣,但是其實不行耶…




--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.174.137.18

Loading...