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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■23700  VS2005 Pro & Express の共存は可能?
□投稿者/ DD. -(2008/08/20(Wed) 14:48:43)

    分類:[C#] 

    お世話になります。DD.です。

    (分類はその他にしようか悩みましたが、一応C#依存なのでC#にさせて頂きます)

    最近流行?の「XNA Game Studio」をちょこっと遊んでみようかと
    MSDNの赤坂氏の記事を読んでいたのですが、気になることがありまして。

    <引用>Visual C# 2005 Express Edition の上位エディションである Visual Studio をインストールしている場合でも、XNA Game Studio Express を使うには Visual C# 2005 Express Edition をインストールしなければなりません。</引用>

    家では既にVS2005 Proがインストール済みなのですが、
    できればそのまま残してExpress Editionと共存できればと思っています。
    やってみる前に、問題があるなどの事例があればお聞きしたいと思い、
    質問させて頂きました。

    教えてえらいひと。
親記事 /過去ログ44より / 関連記事表示
削除チェック/

■92113  VB.net FocusとLeaveについて
□投稿者/ 井上 -(2019/08/27(Tue) 20:27:13)

    分類:[VB.NET/VB2005 以降] 

    初心者です。初めて質問させていただきます。

    私は、Visual Studio Professional 2017 を使用しています。

    【質問内容】
    コンボボックスにフォーカス設定し、初期値0が表示されたテキストに、1から99の値を手入力で変更した場合のイベント発生についてです。

    理想としては、「テキストの値変更→TextChangedイベント発生→フォーカスアウト→Leaveイベント発生」なのですが、
    値を変更すると、「テキストの値変更→フォーカスアウト→Leaveイベント発生」となり、TextChangedイベントが発生しません。

    原因は、値を変更した際にフォーカスアウトしてしまうためTextChangedイベントではなく、Leaveイベントが発生すると考えたのですが、
    フォーカスアウトせずに、TextChangedイベントを発生させることは不可能でしょうか?

    また、他に良いアイデアがあればご教授していただけないでしょうか?

    分かりにくい内容で申し訳ございませんが、よろしくお願いいたします。
親記事 /過去ログ159より / 関連記事表示
削除チェック/

■92117  Re[1]: VB.net FocusとLeaveについて
□投稿者/ 魔界の仮面弁士 -(2019/08/28(Wed) 10:05:40)
    No92113 (井上 さん) に返信
    > コンボボックスにフォーカス設定し、初期値0が表示されたテキストに、
    > 1から99の値を手入力で変更した場合のイベント発生についてです。

    Windows Form アプリケーションでしょうか。
    ComboBox には 3 種のスタイルがありますが、どれのことでしょう?

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
     'ComboBox1.Items.Clear()
     ComboBox1.DataSource = Enumerable.Range(1, 99).ToArray()
     ComboBox1.SelectedIndex = -1

     ComboBox2.DropDownStyle = ComboBoxStyle.DropDown
     'ComboBox2.Items.Clear()
     ComboBox2.DataSource = Enumerable.Range(1, 99).ToArray()
     ComboBox2.SelectedIndex = -1
     
     ComboBox3.DropDownStyle = ComboBoxStyle.Simple
     ComboBox3.Height = 180
     'ComboBox3.Items.Clear()
     ComboBox3.DataSource = Enumerable.Range(1, 99).ToArray()
     ComboBox3.SelectedIndex = -1
    End Sub


    > 理想としては、「テキストの値変更→TextChangedイベント発生→フォーカスアウト→Leaveイベント発生」なのですが、
    > 値を変更すると、「テキストの値変更→フォーカスアウト→Leaveイベント発生」となり、TextChangedイベントが発生しません。

    上記の ComboBox2 や ComboBox3 にフォーカスがある状態(テキストが空)で、
    キーボードから [Num1][Num2][Num3][Tab] と入力したところ、当方環境では
     TextUpdate
     TextChanged
     TextUpdate
     TextChanged
     TextUpdate
     TextChanged
     Leave
    の順でイベントが発生しましたよ。※IMEはオフの状態
    テキスト部に直接入力するのではなく、リストから選ぶだけの場合には、
    TextUpdate は発生せず、TextChanged だけになりますね。


    > 原因は、値を変更した際にフォーカスアウトしてしまうため
    > TextChangedイベントではなく、Leaveイベントが発生すると考えたのですが、

    「値を変更した際にフォーカスアウトしてしまう」事象は経験したことがありません…。


    TextChanged イベントが使われるのは、テキスト部に自由な文字列を入れられる、
    DropDown スタイルや Simple スタイルの場合に限られます。これらのスタイルでは、
    テキスト部イベント(TextUpdate / TextChanged)と
    選択リストイベント(SelectionChangeCommitted / SelectedValueChanged / SelectedIndexChanged)
    の両方が使われますし、Text プロパティと Selected何某プロパティは、明確に使い分けされます。



    一方 DropDownList スタイルの場合は、そもそもテキストボックス部が無いため、
    選択リストイベント(SelectionChangeCommitted / SelectedValueChanged / SelectedIndexChanged)
    のみが使われます。そもそも TextUpdate は発生すらしないようなので、
    テキスト部イベント(TextUpdate / TextChanged)と
    の出番は無いでしょう。
    一応 DropDownList スタイルであっても、TextChanged なら発生することもありますが、
    手順によっては発生しないパターンもありますので、これに頼ることはほぼ無いはずです。
    (マウス操作かキーボード操作か、ドロップダウンを伴うかどうかなどで変わる)

    たとえば
     ComboBox1_SelectionChangeCommitted
     ComboBox1_TextChanged ★
     ComboBox1_SelectedValueChanged
     ComboBox1_SelectedIndexChanged
     ComboBox1_Leave
     ComboBox1_Validating
     ComboBox1_Validated
    の順で発生することもあれば、TextChanged なしで
     ComboBox1_SelectionChangeCommitted
     ComboBox1_SelectedValueChanged
     ComboBox1_SelectedIndexChanged
     ComboBox1_Leave
     ComboBox1_Validating
     ComboBox1_Validated
    となることもあれば、
     ComboBox1_SelectedValueChanged
     ComboBox1_SelectedIndexChanged
     ComboBox1_Leave
     ComboBox1_Validating
     ComboBox1_Validated
     ComboBox1_TextChanged ★
    となることもありますね。


    > また、他に良いアイデアがあればご教授していただけないでしょうか?
    そもそも何のために TextChanged を使用しようとしているのでしょうか。
    何故 Leave の後だと都合が悪いのかという理由も分からないので、
    今のままでは改善案の出しようがありません。(^_^;)
記事No.92113 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92116  Re[1]: VB.net FocusとLeaveについて
□投稿者/ 大谷刑部 -(2019/08/28(Wed) 09:55:39)
    No92113 (井上 さん) に返信
    > 初心者です。初めて質問させていただきます。
    >
    > 私は、Visual Studio Professional 2017 を使用しています。
    >
    > 【質問内容】
    > コンボボックスにフォーカス設定し、初期値0が表示されたテキストに、1から99の値を手入力で変更した場合のイベント発生についてです。
    >
    > 理想としては、「テキストの値変更→TextChangedイベント発生→フォーカスアウト→Leaveイベント発生」なのですが、
    > 値を変更すると、「テキストの値変更→フォーカスアウト→Leaveイベント発生」となり、TextChangedイベントが発生しません。
    TextChangedイベントはテキストプロパティーの値が変わったら発生するものなので、LostFocusやLeaveと連動して発生するものじゃありません。

    > 原因は、値を変更した際にフォーカスアウトしてしまうためTextChangedイベントではなく、Leaveイベントが発生すると考えたのですが、
    > フォーカスアウトせずに、TextChangedイベントを発生させることは不可能でしょうか?
    物理的には、イベントを無効すれば、多分できますが、それじゃ使い勝手かえって悪くなるでしょ?
    値変わってたら、コントロール移動できないというような挙動になりかねないので。

    そもそもTextChangedイベントでどんな処理をしたいのですか?
    入力値の論理エラーチェック的な話ならそもそも「Change」のつくイベントでするのはお勧めしません。
    だって、発生頻度が高すぎますから。

    まだ、LostFocusやLeaveのほうがましです。
    ただし、コマンドボタン押下時に2回チェックが走らないように注意するとかは必要ですね。

    入力が1〜99まであり得るならやむを得ないですが、リストが数件ならそもそもコンボボックスで入力可にすること自体やめた方がいいようなーーー。
    VB6の時代からそうですが、コンボはただでさえも想定外の挙動が起きやすいうえ入力可にすることにより、
    テキストボックスと同じ挙動も気にしなきゃならなくなるので、入力不可(選択のみ可)にする方が一般的な気がします。
記事No.92113 のレス /過去ログ159より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -