none
VB 2008)Enabled=False時にEnter処理が実行される RRS feed

  • 質問

  • いつもお世話になっております。

    VB 2008の設定について
    質問があり、投稿させて頂きます。


    作成中のプログラムにて
    あるテキストボックスがEnabled=Falseになった時点で
    そのテキストボックスのEnterイベントが実行されます。


    他のプログラムを確認しましたが、
    Enabled=FalseになったらEnterイベント実行
    されるようなはなく、
    プログラムの設定でそのような動きになっていると
    考えています。

    しかし、どこの設定で行われているのかが分かりません。
    (EnabledChanged内でEnterイベントを実行しているわけでもありませんでした。)

    Enabled=FalseになったらEnterイベントまたは他のイベントを実行する
    設定はどこで行う事ができるのでしょうか?
    2020年12月8日 6:24

すべての返信

  • 何を作っているか(Windows Forms? WPF? ASP.NET Web Forms? その他?)と開発環境(OS, Visual Studio のバージョン、.NET なのか Core なのかとそのバージョン)は書けない事情とかがあるのですか?
    2020年12月8日 6:34
  • すみません。書き忘れていました。

    まず、作っているのはWindows Formsです。

    そして開発環境は

    OS:windows Server 2008 R2

    Visual Stdio:Visual Stdio2008

    .Net: .Net Framework 3.5.1

    となっています。

    2020年12月8日 6:42
  • まずはコードエディタで「すべての参照の検索」を実行し、そのテキストボックスが使われている箇所を精査されてはいかがでしょうか?

    # Visual Studio 2008 にその機能があったかどうかは失念しましたが・・・


    本フォーラムは、ユーザー(開発者)同士で情報交換を行うためのコミュニティです。初めて利用される方は フォーラムでご質問頂くにあたっての注意点 をご覧ください。

    2020年12月9日 5:02
    モデレータ
  • フォーカス遷移を操作している箇所はありませんか?

    ActiveControl = TextBox1
    という処理を実行すると、TextBox1 が Enabled = False の状態であっても TextBox1 の Enter イベントが発生します。

    しかし、どこの設定で行われているのかが分かりません。

    TextBox の Enter イベントで StackTrace を追ってみては如何でしょう。

    Dim txt = DirectCast(sender, TextBox)
    If Not txt.Enabled Then
        Dim st As New System.Diagnostics.StackTrace(True)
        MessageBox.Show(Me, st.ToString())
    End If
    

    2020年12月9日 5:35
  • LEE_IIIさん、こんにちは。フォーラムオペレーターのKumoです。 
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    ご質問いただいた件ですが、その後いかがでしょうか。
    皆様から寄せられた投稿はお役に立ちましたか。

    参考になった投稿には [回答としてマーク] をお願い致します。

    設定いただくことで、
    他のユーザーもお役に立つ回答を見つけやすくなります。

    お手数ですが、ご協力の程どうかよろしくお願いいたします。

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2020年12月14日 7:58
    モデレータ
  • この件について返信が遅れて申し訳ございません。


    こちらの件ですが、
    ActiveControl = TextBox1
    を実行しているわけでもありませんでした。


    ただ、無限ループが発生している原因はわかりました。
      ※不具合の原因について
       この不具合が発生しているプログラムでは
       テキストボックスを2段に並べて1行とし、
       それを10行だけ画面に表示しています。
     
       そして横にスクロールバーがあり、
       それを動かす事で複数行入力を
       行えるようにしています。
     
       Active_Indexという変数があり、
       これは「現在処理中の行は何行目」かを
       表すのに使用しています。
     
       そして、各テキストボックスのEnterイベントには
       「ACTIVE_INDEX<>テキストボックスの属する行
        ならばスクロールバー移動処理を行う」
       とありました。
     
       この「スクロールバー移動処理」内でもEnabled=False
       を実行しているため、ここで無限ループに陥っている事が
       分かりました。
     
     よって、この件はACTIVE_INDEXに
     適切な値がセットされていない事が原因でした。
     

    そこで、Enabled=Falseにする前に
    Sav_ACTIVE_INDEXに現在処理中の行を指す数値を仮でセットします。
    Enabled=Falseを行った後、
    Sav_ACTIVE_INDEXの値を元に戻す事で
    対応しました。

    結局、VBの設定が原因と考えていましたが、
    プログラムの仕様が原因でした。

    この質問についてご回答頂いた皆様には
    大変感謝しております。
    • 編集済み LEE_III 2021年1月14日 1:04
    2021年1月14日 1:03