tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDataGridViewセルへ表示された画像のパス取得
記事No9393
投稿日: 2009/09/11(Fri) 02:04
投稿者コンタクト
いつもお世話にあっております。

開発環境
VS2005 C#

ListViewに表示された画像一覧から
ドラッグ&ドロップでDataGridViewのセルに画像を貼り付けています。

貼り付ける前に画像をStreamしてBitMapオブジェクトにしています。

セルへの画像貼り付けは

Bitmap bmp = new ("画像フルパス")
DataGridView1[x,y].Value = bmp;

という風に指定セルに描画しています。

お聞きしたいことは

セルに描画されたbmpのフルパスを、セルをクリックしたときに表示させるには
どうすれば良いのか教えていただきたいです。

試してみたことは
string s = DataGridView[x],y].Value as string
です。
nullしかかえってきません。

以上、よろしくお願いします。

[ツリー表示へ]
タイトルRe: DataGridViewセルへ表示された画像のパス取得
記事No9394
投稿日: 2009/09/11(Fri) 07:22
投稿者オショウ
> お聞きしたいことは
>
> セルに描画されたbmpのフルパスを、セルをクリックしたときに表示させるには
> どうすれば良いのか教えていただきたいです。

  画像のフルパスと言う情報は別途自身で管理しないとどうにも
  なりません。

  ListView側からドラッグアンドドロップする・・・と言う方は
  ご自身でお考え下さい。

  私は、DataGridViewに非表示列を作ってそこにフルパスを文字
  列として保存し、画像セルがクリックされた際にそのフルパス
  を保存したセルから読み出して次処理を行う・・・ようにして
  います。

以上。参考まで

[ツリー表示へ]
タイトルRe^2: DataGridViewセルへ表示された画像のパス取得
記事No9395
投稿日: 2009/09/11(Fri) 08:49
投稿者コンタクト
> > お聞きしたいことは
> >
> > セルに描画されたbmpのフルパスを、セルをクリックしたときに表示させるには
> > どうすれば良いのか教えていただきたいです。
>
>   画像のフルパスと言う情報は別途自身で管理しないとどうにも
>   なりません。
>
>   ListView側からドラッグアンドドロップする・・・と言う方は
>   ご自身でお考え下さい。
>
>   私は、DataGridViewに非表示列を作ってそこにフルパスを文字
>   列として保存し、画像セルがクリックされた際にそのフルパス
>   を保存したセルから読み出して次処理を行う・・・ようにして
>   います。
>
> 以上。参考まで

回答ありがとうございます。
ドラッグアンドドロップは出来ていますので大丈夫です。
ご心配ありがとうございます。

非表示列を使用して、この処理は行ったほうがいいみたいですので
参考にさせていただきます。

ありがとうございました^^

[ツリー表示へ]
タイトルRe^3: DataGridViewセルへ表示された画像のパス取得
記事No9396
投稿日: 2009/09/11(Fri) 09:25
投稿者コンタクト
無事動作確認できました。ありがとうございました。

[ツリー表示へ]
タイトルRe: DataGridViewセルへ表示された画像のパス取得
記事No9397
投稿日: 2009/09/11(Fri) 09:47
投稿者魔界の仮面弁士
> 開発環境
> VS2005 C#
ここは、VB の掲示板ですよ。


> ListViewに表示された画像一覧から
> ドラッグ&ドロップでDataGridViewのセルに画像を貼り付けています。
DoDragDrop に渡すオブジェクトは、どのようなデータでしょうか。

画像パスの文字列ですか? Image 継承クラス? それともListViewItem クラス?
あるいは、独自に作成した構造体/クラスなのでしょうか?


> 貼り付ける前に画像をStreamしてBitMapオブジェクトにしています。
BitMap → Bitmap ですよね。(^^;
C# であるならば、大文字小文字の違いには気をつけないと。VB ならば許容できますが。


> Bitmap bmp = new ("画像フルパス")
そのような構文は使えないと思いますよ。

C# 2008 の開発段階で、その省略構文が検討された事もあったけれども、
最終的に var bmp = new Bitmap("画像フルパス"); 構文が採用されたはず…。


で。このコードを見る限り、『画像をStreamして』という処理が
見当たらないのですが、それはどこにあるのでしょうか?
もしかして、Bitmap(String) コンストラクタを呼び出しているのではなく、
Bitmap(Stream) コンストラクタを呼び出しているのでしょうか?
それとも順番が逆で、Bitmap を MemoryStream 等にシリアライズしているのでしょうか?


> string s = DataGridView[x],y].Value as string
これも、文法的におかしいです。


> セルに描画されたbmpのフルパスを、セルをクリックしたときに表示させるには
> どうすれば良いのか教えていただきたいです。
この場合のセルは、画像表示用の DataGridViewImageCell ですね?


Bitmap クラスには、元画像のパスが保存されていないので、今の作りでは無理ですが、
パスを一緒に保持しておけば、目的を果たせるかと思います。


<C#>
// 割り当て
Bitmap bmp = new Bitmap(bitmapPath);
bmp.Tag = bitmapPath;
dataGridView1[x, y].Value = bmp;

// 取り出し
Bitmap bmp = dataGridView1[x, y].Value as Bitmap;
lable1.Text = (bmp != null) ? bmp.Tag as string : string.Empty;


<VB>
' 割り当て
Dim bmp As New Bitmap(bitmapPath)
bmp.Tag = bitmapPath
DataGridView1(x, y).Value = bmp

' 取り出し
Dim bmp As Bitmap = TryCast(DataGridView1(x, y).Value, Bitmap)
If bmp Is Nothing Then
    Lable1.Text = ""
Else
    Label1.Text = CStr(bmp.Tag)
End If

[ツリー表示へ]
タイトルRe^2: DataGridViewセルへ表示された画像のパス取得
記事No9398
投稿日: 2009/09/11(Fri) 13:00
投稿者コンタクト
> > 開発環境
> > VS2005 C#
> ここは、VB の掲示板ですよ。

もしわけありません。
板の場所を間違えないように。。。とは気にしていたのですが
言語まで気にしてなかったです。

> > ListViewに表示された画像一覧から
> > ドラッグ&ドロップでDataGridViewのセルに画像を貼り付けています。
> DoDragDrop に渡すオブジェクトは、どのようなデータでしょうか。
>
> 画像パスの文字列ですか? Image 継承クラス? それともListViewItem クラス?
> あるいは、独自に作成した構造体/クラスなのでしょうか?

画像パスの文字列になります。

>
> > 貼り付ける前に画像をStreamしてBitMapオブジェクトにしています。
> BitMap → Bitmap ですよね。(^^;
> C# であるならば、大文字小文字の違いには気をつけないと。VB ならば許容できますが。

申し訳ありません。以後気をつけます。
>
> > Bitmap bmp = new ("画像フルパス")
> そのような構文は使えないと思いますよ。
> C# 2008 の開発段階で、その省略構文が検討された事もあったけれども、
> 最終的に var bmp = new Bitmap("画像フルパス"); 構文が採用されたはず…。
これも記入ミスです・・・・。

> で。このコードを見る限り、『画像をStreamして』という処理が
> 見当たらないのですが、それはどこにあるのでしょうか?
> もしかして、Bitmap(String) コンストラクタを呼び出しているのではなく、
> Bitmap(Stream) コンストラクタを呼び出しているのでしょうか?
> それとも順番が逆で、Bitmap を MemoryStream 等にシリアライズしているのでしょうか?

ここは別クラスから呼び出してます。
特に明記する必要ないかと思い、省きました。

> > string s = DataGridView[x],y].Value as string
> これも、文法的におかしいです。
はい。。。これしか思いつかずに
長いことgoogleやメンバを探したのですが見つかりませんでした。
>
> > セルに描画されたbmpのフルパスを、セルをクリックしたときに表示させるには
> > どうすれば良いのか教えていただきたいです。
> この場合のセルは、画像表示用の DataGridViewImageCell ですね?
>
> Bitmap クラスには、元画像のパスが保存されていないので、今の作りでは無理ですが、
> パスを一緒に保持しておけば、目的を果たせるかと思います。
>
提示していただけたコードで動作確認できました。
ありがとうございます。

[ツリー表示へ]
タイトルRe^3: DataGridViewセルへ表示された画像のパス取得
記事No9399
投稿日: 2009/09/11(Fri) 13:02
投稿者魔界の仮面弁士
>>> string s = DataGridView[x],y].Value as string
>> これも、文法的におかしいです。
> はい。。。これしか思いつかずに

や。処理手法では無く文法の話です。『 ] 』が不正ですよね。
本来のコードは
  string s = DataGridView[x],y].Value as string
ではなく、
  string s = dataGridView1[x,y].Value as string;
ではありませんか?

[ツリー表示へ]
タイトルRe^4: DataGridViewセルへ表示された画像のパス取得
記事No9400
投稿日: 2009/09/11(Fri) 18:06
投稿者コンタクト
> や。処理手法では無く文法の話です。『 ] 』が不正ですよね。
> 本来のコードは
>   string s = DataGridView[x],y].Value as string
> ではなく、
>   string s = dataGridView1[x,y].Value as string;
> ではありませんか?
その通りです。
間違った記述申し訳ありませんでした。

今回の質問で、混乱を招き申し訳ありませんでした。

以後、質問時にはこのようなことがないようにいたします。

[ツリー表示へ]