作者ahjay (慢慢來NN)
看板C_Sharp
標題[問題] 關於繼承(window form)
時間Thu Jan 27 14:05:08 2011
我在主程式建立了一個panel的...如下
public partial class Form1 : Form
{
.....
Graphics Original = panel_original.CreateGraphics();
.....
}
然後副程式如下
public class All_paint : Form1
{
public void orig_paint(ArrayList ori)
{
Original.clear(color.white);
}
}
這樣就不行了= =
不知道我有漏掉甚麼東西嗎?(._.?)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.126.10.243
1F:→ james732:你怎麼樣用它?怎麼樣沒辦法? 01/27 14:10
以回復 我是新手 抱歉= =
※ 編輯: ahjay 來自: 120.126.10.243 (01/27 14:16)
2F:→ andymai:繼承的關係可以看成主、副程式?另外錯誤訊息是?也沒看到怎 01/27 17:17
3F:→ andymai:麼使用Form1和All_paint這兩個類別啊... 01/27 17:18
這是gui的程式
然後我在Form1[設計]的介面拉了一個panel
然後我想在別的class使用這一個panel 不知道要怎麼用?
※ 編輯: ahjay 來自: 120.126.10.246 (01/27 19:26)
4F:→ andymai:那是怎麼用All_paint類別?在哪裡用? 01/27 23:28
5F:→ andymai:另外繼承不是拿來傳遞實值東西的~而是像遺傳一樣~父親身體 01/27 23:30
6F:→ andymai:有的~兒子也有~但不代表父親吃飽了~兒子也會跟著飽... 01/27 23:30
7F:→ ahjay:我All_paint是要用來畫圖 畫線或是圖刑之類的 01/28 00:13
8F:→ ahjay:所以說 我想要繼承panel是沒辦法的嗎? 01/28 00:14
9F:→ andymai:最簡單的方法~可以把Original弄成static或在方法傳遞~但我 01/28 00:18
10F:→ andymai:還是覺得您應該把實作的部份程式貼上來~才能知道真正問題 01/28 00:19
11F:→ ahjay:好 01/28 00:28
主程式
if (s.Count == ori_scale)//如果達到了1024的倍數點就進入畫圖
{
Original.Clear(Color.White);
ori_xscale /= Convert.ToInt16(comboBox1.Text);
all_paint.orig_paint(s, pf_ori, ori_scale, ori_xscale);
s.Clear();
Original.DrawLines(drawpen, pf_ori);<----可以在副程式直接跑
ori_xscale = 0.503f;
}
呼叫的副程式
public void orig_paint(ArrayList ori, PointF[] pf, int scale, float x_scale)
{
Point ori_center = new Point(0, 125);
int x = 0;
float y_Scale = 60f;
for (int n = 0; n < scale; n++)
{
pf[n].X = ori_center.X + x_scale * x;
pf[n].Y = ori_center.Y - ((float)Convert.ToInt16(ori[n]) -
2048) / y_Scale;
x++;
}
x = 0;
}
現在是希望能夠把程式碼都丟到副程式那邊執行 不知道這樣看不看得懂@_@?
如果還不清楚可以在推文 我會盡快回復 謝謝你
※ 編輯: ahjay 來自: 120.126.10.246 (01/28 00:35)
12F:→ andymai:上面這段是寫在All_paint類別裡面的吧?問題點應該在Form1 01/28 00:45
13F:→ andymai:裡面~程式開始執行是先開啟了Form1吧?還是All_paint? 01/28 00:47
14F:→ ahjay:Form1 01/28 00:50
public partial class Form1 : Form
{
private void timer1_Tick(object sender, EventArgs e)
{
ArrayList s=new ArrayList();
s.Add(y);---->y是連續傳的值(我用藍芽)
if (s.Count == ori_scale)//如果達到了1024的倍數點就進入畫圖
{
Original.Clear(Color.White);
ori_xscale /= Convert.ToInt16(comboBox1.Text);
all_paint.orig_paint(s, pf_ori, ori_scale, ori_xscale);
s.Clear();
Original.DrawLines(drawpen, pf_ori);
ori_xscale = 0.503f;
}
然後就是上面那段副程式
※ 編輯: ahjay 來自: 120.126.10.246 (01/28 00:53)
15F:→ andymai:@@那為什麼不要把Original直接從orig_paint方法傳進去呢? 01/28 01:01
16F:→ andymai:另外您一直說主副程式~那...All_Paint有new過了嗎?錯誤訊 01/28 01:01
17F:→ andymai:息是什麼? 01/28 01:01
18F:→ ahjay:請問一下 要怎麼直接把Original從orig_paint傳過去?因為這 01/28 01:04
19F:→ ahjay:邊其實不是很懂 現在還是新手階段Q_Q 01/28 01:04
all_paint.orig_paint(s, pf_ori, ori_scale, ori_xscale,Original);
^^^^^^^^^^是這樣嗎?
如果是的話 那
public void orig_paint(ArrayList ori, PointF[] pf, int scale,
float x_scale,______________)這邊應該寫甚麼阿 是Graphics嗎?
※ 編輯: ahjay 來自: 120.126.10.246 (01/28 01:08)
20F:→ andymai:Graphics Original → 型態和變數名... 01/28 01:14
21F:→ andymai:我建議您應該要從頭開始學~這樣跳太快了~外人很難幫... 01/28 01:15
22F:→ ahjay:好 謝謝你Q_Q 01/28 01:16