
No.1ベストアンサー
- 回答日時:
こんにちは。
RichTextBoxの仕様を読んでいないので標準でできたりするのかもしれません。
vb6だとできるんですかね。 → http://okwave.jp/qa/q951600.html
今回は自前で泥臭くやってみました。
Drag&Drop処理は省略します。
1. アイコン表示用PictureBox:PictureBoxとファイルパス:stringのDictionaryを作成
Dictionary<PictureBox, string> _dictionary = new Dictionary<PictureBox, string>();
2. DragDropイベントハンドラでファイルパス、マウスポジションなどを取得
Point mousePosition = richTextBox1.PointToClient(Cursor.Position);
3. ファイルパスからアイコンを取得
Icon appIcon = Icon.ExtractAssociatedIcon(path);
4. 取得したアイコン、ファイルパスの情報をDictionaryへ
5. PictureBoxのMouseDoubleClickイベントハンドラを追加
といった感じでした。
今回の問題点として
1. 複数ファイルを受け付けた時の配置
2. RichTextBoxのスペース調整(アイコン(実際にはPictureBox)を表示する場所を開けるならば)
があります。他にもあるかも・・・
以下は今回書いたソースです。Drag&Dropでは複数ファイルを受け付けていますが、1つのファイルにのみ処理を行なっています。
public partial class Form1 : Form
{
private Dictionary<PictureBox, string> _dictionary = new Dictionary<PictureBox, string>();
public Form1()
{
InitializeComponent();
richTextBox1.DragEnter += new DragEventHandler(richTextBox1_DragEnter);
richTextBox1.DragDrop += new DragEventHandler(richTextBox1_DragDrop);
}
private void Form1_Load(object sender, EventArgs e)
{
richTextBox1.AllowDrop = true;
}
/// <summary>
/// DragDropされたイベントハンドラ
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void richTextBox1_DragDrop(object sender, DragEventArgs e)
{
Point mousePosition = richTextBox1.PointToClient(Cursor.Position);
string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop, false);
string path = filePaths[0];
Icon appIcon = Icon.ExtractAssociatedIcon(path);
PictureBox pictureBox = new PictureBox();
pictureBox.Image = appIcon.ToBitmap();
pictureBox.SizeMode = PictureBoxSizeMode.AutoSize;
pictureBox.Location = mousePosition;
pictureBox.Cursor = Cursors.Arrow;
_dictionary.Add(pictureBox, path);
this.richTextBox1.Controls.Add(pictureBox);
pictureBox.MouseDoubleClick += new MouseEventHandler(pictureBox_MouseDoubleClick);
}
/// <summary>
/// PictureBoxのマウスダブルクリックイベントハンドラ
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox_MouseDoubleClick(object sender, MouseEventArgs e)
{
var pictureBox = sender as PictureBox;
if (!_dictionary.Keys.Contains(pictureBox))
{
return;
}
System.Diagnostics.Process.Start(_dictionary[pictureBox]);
}
/// <summary>
/// DragEnterされたイベントハンドラ
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void richTextBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
}
問題点が残ったままですが、少しはお役に立てればとおもいます。
この回答へのお礼
お礼日時:2013/01/17 15:57
どうもありがとうございます!!!
自分でも他の方法を試してみたのですがアイコンの取得がうまくできなくて悩んでいましたが、この方法で解決することができました!!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0バイトのテキストファイル
-
Eclipseで検索ができなくなった
-
VBAで、JPG写真の撮影日時を読...
-
C# リッチテキストボックス...
-
リソースファイルを認識してく...
-
Javaで名前付きパイプ
-
Indy FTP サーバー上のファイル...
-
JavaでPDFファイルに変換するに...
-
【Excel VBA】取り込んだファイ...
-
main関数のコマンドライン引数...
-
C#でtiffファイルのページ数を取得
-
C++によるファイル送受信プログ...
-
Javaのファイルダウンロードに...
-
CSV名と同じシートを選択して取...
-
openglで音楽を再生する
-
ディレクトリのサイズの取得
-
accessでクエリをExcelにエクス...
-
テキストファイルの一部分を抽...
-
コマンドプロンプトのテキスト...
-
accessのリポートを、excelに出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0バイトのテキストファイル
-
【Excel VBA】取り込んだファイ...
-
Eclipseで検索ができなくなった
-
VBAで、JPG写真の撮影日時を読...
-
HTMLテキストリンクでExcelファ...
-
VB6.0のメモリリークについて
-
Appletにて入力文字のファイル...
-
C++.NET 2003 「空のドキュメ...
-
VB2008 iniファイルの全セクシ...
-
windows 環境でのファイル操作...
-
dllって?
-
パスワード設定のタグについて
-
ファイルを取得するC#のプロ...
-
main関数のコマンドライン引数...
-
Accessで一覧を表示するWebペー...
-
ファイル作成日時と更新日時を...
-
【VBA】印刷マクロのループ処理...
-
携帯電話への動画配信
-
ファイル内容を比較する方法
-
Javaのファイルダウンロードに...
おすすめ情報