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

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

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

Re[3]: 1つのオブジェクトを2つのイベントで使用する方法


(過去ログ 112 を表示中)

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

■66646 / inTopicNo.1)  1つのオブジェクトを2つのイベントで使用する方法
  
□投稿者/ mako_chan3 (7回)-(2013/05/13(Mon) 14:34:26)

分類:[C#] 

お世話になります。
環境はVisual Studio2010です。

button_Click1で生成したBitmap bmpオブジェクトをbutton2_Clickイベントでも使用したいと考えています。
そのまま記述すると「名前’bmp’は現在のコンテキスト内に存在しません」のエラーが表示されます。
たしかにスコープとしては別エリアになるのでこのエラーもわかる気がしますが・・・
どのようにすれば別イベントの中でも使用できるのでしょうか。

問題の「bmp」はコードの●→の部分です。

    private void button1_Click(object sender, EventArgs e)
{
      (省略)
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Bitmap bmp = new Bitmap(openFileDialog1.FileName); //Bitmapクラスのbmpインスタンスを作成
pictureBox1.Image = bmp;
}
}

private void button2_Click(object sender, EventArgs e)
{
const int GMAX = 255; //画像色の最大濃度値です。
int i, j; //画像中のピクセル位置を表す変数の定義です。
int rr, gg, bb; //RGBの各輝度値です。
Color col; //カラークラスのフィールドを定義します。

int nx, ny; //画像の横(x)、縦(y)の長さを格納する変数です。

●→nx = bmp.Width;
●→ny = bmp.Height;

for(j = 0; j < ny; j++)
for (i = 0; i < nx; i++)
{
●→col = bmp.GetPixel(i, j);
rr = GMAX - rr; //R色の輝度反転
gg = GMAX - gg; //G色の輝度反転
bb = GMAX - bb; //G色の輝度反転
●→bmp.SetPxel(i, j, Color.FromArgb(rr, gg, bb)); //画像に輝度反転画像を入れ直す
}

●→pictureBox2.Image = bmp;
}
引用返信 編集キー/
■66647 / inTopicNo.2)  Re[1]: 1つのオブジェクトを2つのイベントで使用する方法
□投稿者/ コンビーフ (2回)-(2013/05/13(Mon) 14:44:48)
button1_Clickで生成したBitmap bmpオブジェクトはpictureBox1.Imageに割り当てられていますので、
一つの方法として、pictureBox1.Imageの実体をbutton2_Clickのbmpオブジェクトに割り当てればいいと思います。
ただし、button1_Clickを行わなかった場合は、bmpはnullとなるので、その場合のチェックは必要です。
引用返信 編集キー/
■66648 / inTopicNo.3)  Re[1]: 1つのオブジェクトを2つのイベントで使用する方法
□投稿者/ shu (311回)-(2013/05/13(Mon) 14:49:27)
No66646 (mako_chan3 さん) に返信

button1_Clickで
pictureBox1.Image に
bmpを設定しているので

button2_Clickで
Bitmap bmp = pictureBox1.Image
とすればよい。

インスタンスが同じなのでbutton2_Clickでの処理は
pictureBox1にも反映されてしまいますが良いのでしょうか?
インスタンスを別にする場合はCloneなどでコピーを作成する
必要があります。

引用返信 編集キー/
■66666 / inTopicNo.4)  Re[2]: 1つのオブジェクトを2つのイベントで使用する方法
□投稿者/ mako_chan3 (8回)-(2013/05/14(Tue) 10:43:53)
No66647 (コンビーフ さん) に返信
> button1_Clickで生成したBitmap bmpオブジェクトはpictureBox1.Imageに割り当てられていますので、
> 一つの方法として、pictureBox1.Imageの実体をbutton2_Clickのbmpオブジェクトに割り当てればいいと思います。
> ただし、button1_Clickを行わなかった場合は、bmpはnullとなるので、その場合のチェックは必要です。
ありがとうございました。
指摘の通りbutton2_Clickを先に行った場合はエラーとなります。
とりあえずbmp=nullの場合の処理を試行錯誤しています。
「何もしない」の処理とした場合、そこでフリーズしてしまいました・・・


引用返信 編集キー/
■66667 / inTopicNo.5)  Re[2]: 1つのオブジェクトを2つのイベントで使用する方法
□投稿者/ mako_chan3 (9回)-(2013/05/14(Tue) 10:52:44)
No66648 (shu さん) に返信
> ■No66646 (mako_chan3 さん) に返信
>
> button1_Clickで
> pictureBox1.Image に
> bmpを設定しているので
>
> button2_Clickで
> Bitmap bmp = pictureBox1.Image
> とすればよい。
>
> インスタンスが同じなのでbutton2_Clickでの処理は
> pictureBox1にも反映されてしまいますが良いのでしょうか?
> インスタンスを別にする場合はCloneなどでコピーを作成する
> 必要があります。
>

ありがとうございます。pictureBox2に画像表示できるようになりました。

引用返信 編集キー/
■66668 / inTopicNo.6)  Re[3]: 1つのオブジェクトを2つのイベントで使用する方法
□投稿者/ mako_chan3 (10回)-(2013/05/14(Tue) 11:14:39)
No66666 (mako_chan3 さん) に返信
> ■No66647 (コンビーフ さん) に返信
>>button1_Clickで生成したBitmap bmpオブジェクトはpictureBox1.Imageに割り当てられていますので、
>>一つの方法として、pictureBox1.Imageの実体をbutton2_Clickのbmpオブジェクトに割り当てればいいと思います。
>>ただし、button1_Clickを行わなかった場合は、bmpはnullとなるので、その場合のチェックは必要です。
> ありがとうございました。
> 指摘の通りbutton2_Clickを先に行った場合はエラーとなります。
> とりあえずbmp=nullの場合の処理を試行錯誤しています。
> 「何もしない」の処理とした場合、そこでフリーズしてしまいました・・・
>
if(bmp == null)
return;
でOkでした。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -