C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: Chartのクローンを生成する方法


(過去ログ 173 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■99547 / inTopicNo.1)  Chartのクローンを生成する方法
  
□投稿者/ わぎゃん (7回)-(2022/04/23(Sat) 09:22:29)

分類:[.NET 全般] 

http://bbs.wankuma.com/index.cgi

ここのページでchartオブジェクトをバックグラウンドで生成できることを教えていただきました。

フォーム上のChartの設定や
PrePaint、PostPaintなどの設定も
まるごとコピーして使いたいのですが
そのようなことは可能でしょうか?

引用返信 編集キー/
■99548 / inTopicNo.2)  Re[1]: Chartのクローンを生成する方法
□投稿者/ Hongliang (1231回)-(2022/04/23(Sat) 20:55:25)
標準的な方法は存在していません。
型自身が提供していないものについてもある程度シンプルな型であれば取れる手段もありますが、Chartは極めて複雑な型でかつOSのシステムリソースも含んでいるためそういう手段も取れないでしょう。
引用返信 編集キー/
■99549 / inTopicNo.3)  Re[1]: Chartのクローンを生成する方法
□投稿者/ WebSurfer (2466回)-(2022/04/24(Sun) 08:40:17)
No99547 (わぎゃん さん) に返信

> フォーム上のChartの設定や
> PrePaint、PostPaintなどの設定も
> まるごとコピーして使いたいのですが
> そのようなことは可能でしょうか?

前のスレッドで「表示するものと保存するものを別に 2 つ作ったらいいんじゃないですか?」と
返事したけどそれはどうしたの?

デザイナでなくコードで書いてメソッドにまとめて、2 回実行してはいかが?
引用返信 編集キー/
■99610 / inTopicNo.4)  Re[2]: Chartのクローンを生成する方法
□投稿者/ わぎゃん (8回)-(2022/05/04(Wed) 08:12:46)
No99549 (WebSurfer さん) に返信

返信が遅れてしまいすいません。


「表示するものと保存するものを別に 2 つ作ったら」に関してですが
PrePaintやPostPaintまで使い回すことができないと思うのですが、
Paintイベントだけはそれぞれに対して作る必要がありますか?


引用返信 編集キー/
■99611 / inTopicNo.5)  Re[3]: Chartのクローンを生成する方法
□投稿者/ Azulean (1232回)-(2022/05/04(Wed) 08:47:54)
No99610 (わぎゃん さん) に返信
> 「表示するものと保存するものを別に 2 つ作ったら」に関してですが
> PrePaintやPostPaintまで使い回すことができないと思うのですが、
> Paintイベントだけはそれぞれに対して作る必要がありますか?

そのイベントハンドラの中身次第です。


■同じイベントハンドラを複数のコントロールに割り当てる方法
イベントに割り当てるイベントハンドラ(メソッド)は同じものを使うことができます。
以下のように、chart1 〜 chart3 まで同じ「chart_PrePaint」を割り当てることができます。
もし、これらのイベントの中で呼び出し元の Chart コントロールのインスタンスを使いたいなら、sender 引数をダウンキャストすれば良いでしょう。

chart1.PrePaint += chart_PrePaint;
chart2.PrePaint += chart_PrePaint;
chart3.PrePaint += chart_PrePaint;

private void chart1_PrePaint(object sender, /* 略 */ e)
{
  Chart chart = (Chart)sender; // 呼び出し元Chart
  //TODO: chartに対する処理を書く  
}


■イベントハンドラの中身を「共通のメソッド」として分離する方法
または、「共通のメソッドを呼ぶイベントハンドラにする」というようにメソッド分割すれば良いでしょう。

chart1.PrePaint += chart1_PrePaint;
chart2.PrePaint += chart2_PrePaint;
chart3.PrePaint += chart3_PrePaint;

private void chart1_PrePaint(object sender, /* 略 */ e)
{
  PrePaint(chart1, e);
}
private void chart2_PrePaint(object sender, /* 略 */ e)
{
  PrePaint(chart2, e);
}
private void chart3_PrePaint(object sender, /* 略 */ e)
{
  PrePaint(chart3, e);
}
private void PrePaint(Chart chart, /* 略 */ e)
{
 //TODO: 引数chartに対するPrePaintイベント共通の処理を書く
}

引用返信 編集キー/
■99612 / inTopicNo.6)  Re[3]: Chartのクローンを生成する方法
□投稿者/ WebSurfer (2476回)-(2022/05/04(Wed) 09:28:32)
No99610 (わぎゃん さん) に返信

> 「表示するものと保存するものを別に 2 つ作ったら」に関してですが
> PrePaintやPostPaintまで使い回すことができないと思うのですが、
> Paintイベントだけはそれぞれに対して作る必要がありますか?

イベントを使う目的は何なのですか? 先のスレッドで表示用と保存用でサイズが違うという
話があって、それに対処するためにクローンを作りたいのだと思ってましたが違うのですか?

そういう目的ではなかったとして、クローンを作れば(どうやって作るのか分かりませんが)
望むようにイベントを使うのができるのですか? それなら、上に提案したように普通に 2
つ作ってもイベントは使えそうな気がしますけど、何が違うんでしょうか?

クローンを作りたいということと話が変わってきてませんか?
引用返信 編集キー/
■99616 / inTopicNo.7)  Re[4]: Chartのクローンを生成する方法
□投稿者/ わぎゃん (9回)-(2022/05/05(Thu) 15:58:29)
No99611 (Azulean さん) に返信

ありがとうございます。

Chart1.PrePaint += Chart1_PrePaint()

とすると

エラー BC32022 'Public Event PrePaint As EventHandler(Of ChartPaintEventArgs)' はイベントであるため、直接呼び出すことはできません。イベントを発生させるには 'RaiseEvent' ステートメントを使用してください。

というエラーが発生してしまいます。

これってどのようにすればエラーが出なくなりますか?



引用返信 編集キー/
■99617 / inTopicNo.8)  Re[5]: Chartのクローンを生成する方法
□投稿者/ Azulean (1233回)-(2022/05/05(Thu) 23:00:15)
No99616 (わぎゃん さん) に返信
> Chart1.PrePaint += Chart1_PrePaint()
> とすると
> エラー BC32022 'Public Event PrePaint As EventHandler(Of ChartPaintEventArgs)' はイベントであるため、直接呼び出すことはできません。イベントを発生させるには 'RaiseEvent' ステートメントを使用してください。
>
> というエラーが発生してしまいます。
>
> これってどのようにすればエラーが出なくなりますか?


私が書いたのは C# での構文なので、VB.NET での構文は自分で調べてみてください。
(このスレッドにおいて言語の指定はされていませんでしたので、前提違いにはなんとも言えません)


そういった調査が難しい、理解が難しいなら「共通のメソッド(関数)を作る」に舵を切ればよろしいかと。
引用返信 編集キー/
■99619 / inTopicNo.9)  Re[6]: Chartのクローンを生成する方法
□投稿者/ わぎゃん (10回)-(2022/05/06(Fri) 14:45:03)
No99617 (Azulean さん) に返信

共通のメソッドを使う方法であっても、
chart1.PrePaint += chart1_PrePaint;
という構文は必要になるので、
結局どうすれば良いか分かりません
引用返信 編集キー/
■99622 / inTopicNo.10)  Re[7]: Chartのクローンを生成する方法
□投稿者/ Azulean (1234回)-(2022/05/06(Fri) 18:14:24)
2022/05/06(Fri) 18:30:56 編集(投稿者)

No99619 (わぎゃん さん) に返信
> 共通のメソッドを使う方法であっても、
> chart1.PrePaint += chart1_PrePaint;
> という構文は必要になるので、

必要とは言えないかと思いますが、なぜそう思ったんですか?

「chart1.PrePaint += chart1_PrePaint」は「chart1 という変数の PrePaint イベントに "chart1_PrePaint" というイベントハンドラをコードで紐づける」程度の意味しかありませんので無視すればよい話ですが、そのあたりがわからかったということなのかな…。
どうしてもチャレンジしたいならその構文を VB.NET と絡めて探してみませんか。

(コピペで済ませるのではなく、コードの意味を理解しようという側で質問されるなら答えようという気持ちになるものの、動くコードをくださいという流れには閉口してしまうので)
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -