読者です 読者をやめる 読者になる 読者になる

森理 麟(moririring)のプログラマブログ

ゲームプログラマ森理 麟がのプログラムの話題を中心に書くブログです。

C#アプリの作り方入門〜「きほん」の「ほ」〜 その12 テキストボックスへのこだわり2

わんくま勉強会 C#

テキスト変更時の処理

それでは1行テキストボックスのメソッドの説明です。

ポイントとしてはテキスト変更時にロード処理を書くだけです。

ただし、書かれたファイルが存在するかでガードが必要です。

もしガードがないと、テキストにファイルパス以外のものが入った時にストップしてしまいます。

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (System.IO.File.Exists(textBox1.Text) == true)
    {
        System.IO.StreamReader sr = new System.IO.StreamReader(textBox1.Text, Encoding.GetEncoding("shift_jis"));
        textBox2.Text = sr.ReadToEnd();
    }
}

ロード処理がまとめられる

このテキストが変更されたらする処理をメソッド化するのは、非常に効率的です。

例えば他の箇所でロード処理を書きたい時、テキスト代入を書くだけですみます。

代入処理をすれば、TextChangedが呼ばれるので、勝手にロード処理が実行される訳です。

具体例を示すと、ファイルダイアログの処理を、下記のように変更してください。

private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
    textBox1.Text = openFileDialog1.FileName;
}

ドラッグ&ドロップ

テキストの手書き対応が終わったので、次は、ドラッグ&ドロップの実現です。

先ずはドラッグしたい対象、今回なら一行テキストボックスのAllowDropをtrueにします。

次にDragEnterイベントを作ります。ドラッグ開始に呼ばれるイベントです。

この中でDragDropEffects.Copyにすればマウスカーソルがコピーのカーソルになります。

private void textBox1_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Copy;
}

やっぱコピーでしょ

ドラッグ&ドロップのサンプルではDragDropEffects.MoveやAllになっている例もあります。

因みにMicrosoftのHPではAllにしているので、それが一番無難かもしれません。

Allの場合知るかぎりではCopyと同じアイコンになります。それ以外のアイコンに変わる例を知りません。

森理はテキストボックスにファイル名をコピーしたいと思って使うので、明示的にCopyを使っています。