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

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

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

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 >>
■56255  Re[7]: UserControlとValidatingについて
□投稿者/ KK -(2011/01/06(Thu) 21:26:06)
    todo 様
    
    > 1回目の TextBoxEx1_Validating の後、TextBoxEx1 に WM_SETFOCUS しているのに、userTextBoxEx1 に WM_SETFOCUS が来るのが謎ですね。
      UserControl上に同一のTextBoxを作成し、Validatingイベントを確認すると1回だけしか発生しませんでした。
      FormとUserControlの変化が、何か悪さをしているのでしょうか。うーん、  本当に謎ですね。
    
    > もっと調べるのであれば、Formの WndProc も記録するとか。
      FormとかUserControl等を、先ほど教えていただいた方法で記録をとってみます。
    
    > あとは、Spy++ というツールもあります。
      使い方等、一度調べてみます。
      
    いろいろアドバイス頂き ありがとうございました。
記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56261  Re[8]: UserControlとValidatingについて
□投稿者/ shu -(2011/01/07(Fri) 07:52:55)
    No56255 (KK さん) に返信

    今回のコントロールの配置ってそんなに特殊ではないと
    思うので、起こっていることを事実として受け止めて
    Validatingが2回走っても問題ないようコーディングすれば
    いいんじゃないかな?
    これだけの為にTextBoxを拡張するのも大変ではないですか?
記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56265  Re[9]: UserControlとValidatingについて
□投稿者/ KK -(2011/01/07(Fri) 09:31:01)
    shu 様

    > 今回のコントロールの配置ってそんなに特殊ではないと思うので、
    > 起こっていることを事実として受け止めて
    > Validatingが2回走っても問題ないようコーディングすれば
    > いいんじゃないかな?
    > これだけの為にTextBoxを拡張するのも大変ではないですか?
    納期の問題もありますので、こちらの方法も検討していきます。

    いろいろアドバイス頂き、本当にありがとうございました。

    ※余談ですが、Validatingでエラーの際にMsgBoxを表示するとValidatingが1回しか発生しないみたいです。
    フォーカスが、MsgBoxに移ってしまうからなんでしょうか・・・。
    ただ、Validating中にMsgBoxはタブーですので使えないんですが・・。

記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56278  Re[8]: UserControlとValidatingについて
□投稿者/ todo -(2011/01/07(Fri) 16:29:25)
    No56255 (KK さん) に返信
    >>もっと調べるのであれば、Formの WndProc も記録するとか。
    > FormとかUserControl等を、先ほど教えていただいた方法で記録をとってみます。

    ログが読みづらかったので改良しました。

    Public Class TextBoxEx
    Inherits TextBox
    Protected Overrides Sub WndProc(ByRef m As Message)
    Util.CallWndProc(Me, MyBase.WndProc, m)
    End Sub
    End Class

    Public Class Util
    Public Delegate Sub WndProcHandler(ByRef m As Message)

    Public Shared Sub CallWndProc(c As Control, wndProc As WndProcHandler, ByRef m As Message)
    Debug.WriteLine(String.Format("{0}:{1}", c.Name, m))
    Debug.Indent()
    wndProc(m)
    Debug.Unindent()
    End Sub
    End Class
記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56281  Re[9]: UserControlとValidatingについて
□投稿者/ KK -(2011/01/07(Fri) 19:04:16)
    todo 様
    ありがとうございます。
    
    > Public Class TextBoxEx
    > Inherits TextBox
    > Protected Overrides Sub WndProc(ByRef m As Message)
    > Util.CallWndProc(Me, MyBase.WndProc, m)
    > End Sub
     エラーが表示されましたので、以下のように変更してみました。
     ※デリゲートについて、勉強不足ですいません。
     
        Protected Overrides Sub WndProc(ByRef m As Message)
            Util.CallWndProc(Me, AddressOf MyBase.WndProc, m)
        End Sub
    
    ******************************************************************************************************************
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x18c0058 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x18c0058 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x18c0058 result=0x0
    userTextBoxEx1:msg=0x20 (WM_SETCURSOR) hwnd=0x280dee wparam=0x280dee lparam=0x2000012 result=0x0
    userTextBoxEx1:msg=0xa0 (WM_NCMOUSEMOVE) hwnd=0x280dee wparam=0x12 lparam=0x18c0058 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1890059 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1890059 result=0x0
    userTextBoxEx1:msg=0x20 (WM_SETCURSOR) hwnd=0x280dee wparam=0x280dee lparam=0x2000001 result=0x0
    userTextBoxEx1:msg=0xc184 hwnd=0x280dee wparam=0x0 lparam=0x0 result=0x0
    userTextBoxEx1:msg=0x200 (WM_MOUSEMOVE) hwnd=0x280dee wparam=0x0 lparam=0xd0023 result=0x0
        userTextBoxEx1:msg=0x85 (WM_NCPAINT) hwnd=0x280dee wparam=0x1 lparam=0x0 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1870059 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1870059 result=0x0
    userTextBoxEx1:msg=0x20 (WM_SETCURSOR) hwnd=0x280dee wparam=0x280dee lparam=0x2000001 result=0x0
    userTextBoxEx1:msg=0x200 (WM_MOUSEMOVE) hwnd=0x280dee wparam=0x0 lparam=0xb0023 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1860059 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1860059 result=0x0
    userTextBoxEx1:msg=0x20 (WM_SETCURSOR) hwnd=0x280dee wparam=0x280dee lparam=0x2000001 result=0x0
    userTextBoxEx1:msg=0x200 (WM_MOUSEMOVE) hwnd=0x280dee wparam=0x0 lparam=0xa0023 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1850059 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1850059 result=0x0
    userTextBoxEx1:msg=0x20 (WM_SETCURSOR) hwnd=0x280dee wparam=0x280dee lparam=0x2000001 result=0x0
    userTextBoxEx1:msg=0x200 (WM_MOUSEMOVE) hwnd=0x280dee wparam=0x0 lparam=0x90023 result=0x0
    userTextBoxEx1:msg=0x2a1 (WM_MOUSEHOVER) hwnd=0x280dee wparam=0x0 lparam=0x90023 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1850059 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1850059 result=0x0
    userTextBoxEx1:msg=0x21 (WM_MOUSEACTIVATE) hwnd=0x280dee wparam=0x60e3c lparam=0x2010001 result=0x0
    userTextBoxEx1:msg=0x20 (WM_SETCURSOR) hwnd=0x280dee wparam=0x280dee lparam=0x2010001 result=0x0
    userTextBoxEx1:msg=0x201 (WM_LBUTTONDOWN) hwnd=0x280dee wparam=0x1 lparam=0x90023 result=0x0
        TextBoxEx1:msg=0x8 (WM_KILLFOCUS) hwnd=0xd0d8a wparam=0x280dee lparam=0x0 result=0x0
            TextBoxEx1:msg=0x2111 (WM_REFLECT + WM_COMMAND) hwnd=0xd0d8a wparam=0x2000d8a lparam=0xd0d8a result=0x0
        TextBoxEx1:msg=0x281 (WM_IME_SETCONTEXT) hwnd=0xd0d8a wparam=0x0 lparam=0xffffffffc000000f result=0x0
        userTextBoxEx1:msg=0x281 (WM_IME_SETCONTEXT) hwnd=0x280dee wparam=0x1 lparam=0xffffffffc000000f result=0x0
        userTextBoxEx1:msg=0x7 (WM_SETFOCUS) hwnd=0x280dee wparam=0xd0d8a lparam=0x0 result=0x0
            userTextBoxEx1:msg=0xd2 hwnd=0x280dee wparam=0x0 lparam=0x0 result=0x0
            TextBoxEx1:msg=0xe (WM_GETTEXTLENGTH) hwnd=0xd0d8a wparam=0x0 lparam=0x0 result=0x0
            TextBoxEx1:msg=0xd (WM_GETTEXT) hwnd=0xd0d8a wparam=0x2 lparam=0x224828 result=0x0
            場所 WindowsApplication1.Form1.TextBoxEx1_Validating(Object sender, CancelEventArgs e) 場所 D:\TEST\WindowsApplication1\WindowsApplication1\Form1.vb:行 15
     	  ↑
              省略
              ↓
            場所 System.Threading.ThreadHelper.ThreadStart()
    
            userTextBoxEx1:msg=0x8 (WM_KILLFOCUS) hwnd=0x280dee wparam=0xd0d8a lparam=0x0 result=0x0
                userTextBoxEx1:msg=0x2111 (WM_REFLECT + WM_COMMAND) hwnd=0x280dee wparam=0x2000dee lparam=0x280dee result=0x0
            userTextBoxEx1:msg=0x281 (WM_IME_SETCONTEXT) hwnd=0x280dee wparam=0x0 lparam=0xffffffffc000000f result=0x0
            TextBoxEx1:msg=0x281 (WM_IME_SETCONTEXT) hwnd=0xd0d8a wparam=0x1 lparam=0xffffffffc000000f result=0x0
            TextBoxEx1:msg=0x7 (WM_SETFOCUS) hwnd=0xd0d8a wparam=0x280dee lparam=0x0 result=0x0
                TextBoxEx1:msg=0xd2 hwnd=0xd0d8a wparam=0x0 lparam=0x0 result=0x0
                TextBoxEx1:msg=0x282 (WM_IME_NOTIFY) hwnd=0xd0d8a wparam=0xa lparam=0x0 result=0x0
                TextBoxEx1:msg=0x282 (WM_IME_NOTIFY) hwnd=0xd0d8a wparam=0xb lparam=0x0 result=0x0
                TextBoxEx1:msg=0x2111 (WM_REFLECT + WM_COMMAND) hwnd=0xd0d8a wparam=0x1000d8a lparam=0xd0d8a result=0x0
        TextBoxEx1:msg=0x8 (WM_KILLFOCUS) hwnd=0xd0d8a wparam=0x280dee lparam=0x0 result=0x0
            TextBoxEx1:msg=0x2111 (WM_REFLECT + WM_COMMAND) hwnd=0xd0d8a wparam=0x2000d8a lparam=0xd0d8a result=0x0
        TextBoxEx1:msg=0x281 (WM_IME_SETCONTEXT) hwnd=0xd0d8a wparam=0x0 lparam=0xffffffffc000000f result=0x0
        userTextBoxEx1:msg=0x281 (WM_IME_SETCONTEXT) hwnd=0x280dee wparam=0x1 lparam=0xffffffffc000000f result=0x0
        userTextBoxEx1:msg=0x7 (WM_SETFOCUS) hwnd=0x280dee wparam=0xd0d8a lparam=0x0 result=0x0
            userTextBoxEx1:msg=0xd2 hwnd=0x280dee wparam=0x0 lparam=0x0 result=0x0
            TextBoxEx1:msg=0xe (WM_GETTEXTLENGTH) hwnd=0xd0d8a wparam=0x0 lparam=0x0 result=0x0
            TextBoxEx1:msg=0xd (WM_GETTEXT) hwnd=0xd0d8a wparam=0x2 lparam=0x224828 result=0x0
              場所 WindowsApplication1.Form1.TextBoxEx1_Validating(Object sender, CancelEventArgs e) 場所 D:\TEST\WindowsApplication1\WindowsApplication1\Form1.vb:行 15
    	  ↑
              省略
              ↓
              場所 System.Threading.ThreadHelper.ThreadStart()
    
            userTextBoxEx1:msg=0x8 (WM_KILLFOCUS) hwnd=0x280dee wparam=0xd0d8a lparam=0x0 result=0x0
                userTextBoxEx1:msg=0x2111 (WM_REFLECT + WM_COMMAND) hwnd=0x280dee wparam=0x2000dee lparam=0x280dee result=0x0
            userTextBoxEx1:msg=0x281 (WM_IME_SETCONTEXT) hwnd=0x280dee wparam=0x0 lparam=0xffffffffc000000f result=0x0
            TextBoxEx1:msg=0x281 (WM_IME_SETCONTEXT) hwnd=0xd0d8a wparam=0x1 lparam=0xffffffffc000000f result=0x0
            TextBoxEx1:msg=0x7 (WM_SETFOCUS) hwnd=0xd0d8a wparam=0x280dee lparam=0x0 result=0x0
                TextBoxEx1:msg=0xd2 hwnd=0xd0d8a wparam=0x0 lparam=0x0 result=0x0
                TextBoxEx1:msg=0x282 (WM_IME_NOTIFY) hwnd=0xd0d8a wparam=0xa lparam=0x0 result=0x0
                TextBoxEx1:msg=0x282 (WM_IME_NOTIFY) hwnd=0xd0d8a wparam=0xb lparam=0x0 result=0x0
                TextBoxEx1:msg=0x2111 (WM_REFLECT + WM_COMMAND) hwnd=0xd0d8a wparam=0x1000d8a lparam=0xd0d8a result=0x0
    userTextBoxEx1:msg=0xf (WM_PAINT) hwnd=0x280dee wparam=0x0 lparam=0x0 result=0x0
    TextBoxEx1:msg=0xf (WM_PAINT) hwnd=0xd0d8a wparam=0x0 lparam=0x0 result=0x0
        TextBoxEx1:msg=0x14 (WM_ERASEBKGND) hwnd=0xd0d8a wparam=0xffffffffc001086a lparam=0x0 result=0x0
    userTextBoxEx1:msg=0x202 (WM_LBUTTONUP) hwnd=0x280dee wparam=0x0 lparam=0x90023 result=0x0
        userTextBoxEx1:msg=0x215 (WM_CAPTURECHANGED) hwnd=0x280dee wparam=0x0 lparam=0x0 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1850059 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1850059 result=0x0
    userTextBoxEx1:msg=0x20 (WM_SETCURSOR) hwnd=0x280dee wparam=0x280dee lparam=0x2000001 result=0x0
    userTextBoxEx1:msg=0x200 (WM_MOUSEMOVE) hwnd=0x280dee wparam=0x0 lparam=0x90023 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x185005a result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x185005a result=0x0
    userTextBoxEx1:msg=0x20 (WM_SETCURSOR) hwnd=0x280dee wparam=0x280dee lparam=0x2000001 result=0x0
    userTextBoxEx1:msg=0x200 (WM_MOUSEMOVE) hwnd=0x280dee wparam=0x0 lparam=0x90024 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x185005d result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x185005d result=0x0
    userTextBoxEx1:msg=0x20 (WM_SETCURSOR) hwnd=0x280dee wparam=0x280dee lparam=0x2000001 result=0x0
    userTextBoxEx1:msg=0x200 (WM_MOUSEMOVE) hwnd=0x280dee wparam=0x0 lparam=0x90027 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1890067 result=0x0
    userTextBoxEx1:msg=0x84 (WM_NCHITTEST) hwnd=0x280dee wparam=0x0 lparam=0x1890067 result=0x0
    userTextBoxEx1:msg=0x20 (WM_SETCURSOR) hwnd=0x280dee wparam=0x280dee lparam=0x2000001 result=0x0
    userTextBoxEx1:msg=0x200 (WM_MOUSEMOVE) hwnd=0x280dee wparam=0x0 lparam=0xd0031 result=0x0
    userTextBoxEx1:msg=0x2a3 (WM_MOUSELEAVE) hwnd=0x280dee wparam=0x0 lparam=0x0 result=0x0
        userTextBoxEx1:msg=0x85 (WM_NCPAINT) hwnd=0x280dee wparam=0x1 lparam=0x0 result=0x0 
    ******************************************************************************************************************
    
    shu様にアドバイス頂いた情報をもとに、
    Validatingイベントで、Me.FindForm.ActiveControlのFocusedをみてみたところ、
    UserControl Me.FindForm.ActiveControlのFocusedがTrueの場合は、1回のみ発生。
    Falseの場合に2回発生していました。
    (※Falseの時も初回のみ1回で、以降は2回でした)
    
記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56282  Re[10]: UserControlとValidatingについて
□投稿者/ KK -(2011/01/07(Fri) 19:17:02)
    先ほどの補足です。

    > Validatingイベントで、Me.FindForm.ActiveControlのFocusedをみてみたところ、
    > UserControl Me.FindForm.ActiveControlのFocusedがTrueの場合は、1回のみ発生。
    > Falseの場合に2回発生していました。
    > (※Falseの時も初回のみ1回で、以降は2回でした)

    > UserControl Me.FindForm.ActiveControlのFocusedがTrueの場合
    A:UserControlのTextBox
    B:TextBoxB
    C:UserControl
    のCをクリックした場合

    > UserControl Me.FindForm.ActiveControlのFocusedがFalseの場合
    A:UserControlのTextBox
    をクリックした場合でした。


    Validatingイベント内で、
    Me.FindForm.ActiveControl.Focused =true の場合は、通常通りチェック()。
    Falseの場合に、1回目のチェック時にフラグを立てて
    2回目以降チェックしないようにすれば回避できそうでしょうか・・。

    ただ、自分の知識の中では、1回目のチェックで立てたフラグを戻すタイミングが
    思いつかないのでもう少し検討しています。


記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56286  Re[11]: UserControlとValidatingについて
□投稿者/ todo -(2011/01/07(Fri) 21:28:31)
    2011/01/07(Fri) 21:38:31 編集(投稿者)

    --ログの要約---
    userTextBoxEx1:msg=0x201 (WM_LBUTTONDOWN) hwnd=0x280dee wparam=0x1 lparam=0x90023 result=0x0
    TextBoxEx1:msg=0x8 (WM_KILLFOCUS) hwnd=0xd0d8a wparam=0x280dee lparam=0x0 result=0x0
    userTextBoxEx1:msg=0x7 (WM_SETFOCUS) hwnd=0x280dee wparam=0xd0d8a lparam=0x0 result=0x0
    場所 WindowsApplication1.Form1.TextBoxEx1_Validating(Object sender, CancelEventArgs e) 場所 D:\TEST\WindowsApplication1
    TextBoxEx1:msg=0x7 (WM_SETFOCUS) hwnd=0xd0d8a wparam=0x280dee lparam=0x0 result=0x0
    TextBoxEx1:msg=0x8 (WM_KILLFOCUS) hwnd=0xd0d8a wparam=0x280dee lparam=0x0 result=0x0 ※ここが問題
    userTextBoxEx1:msg=0x7 (WM_SETFOCUS) hwnd=0x280dee wparam=0xd0d8a lparam=0x0 result=0x0
    場所 WindowsApplication1.Form1.TextBoxEx1_Validating(Object sender, CancelEventArgs e) 場所 D:\TEST\WindowsApplication1
    userTextBoxEx1:msg=0x8 (WM_KILLFOCUS) hwnd=0x280dee wparam=0xd0d8a lparam=0x0 result=0x0
    TextBoxEx1:msg=0x7 (WM_SETFOCUS) hwnd=0xd0d8a wparam=0x280dee lparam=0x0 result=0x0
    userTextBoxEx1:msg=0x202 (WM_LBUTTONUP) hwnd=0x280dee wparam=0x0 lparam=0x90023 result=0x0
    ------
    Validating後、TextBoxEx1に WM_KILLFOCUS が来るのが変です。


    WM_LBUTTONDOWNとWM_LBUTTONUPの間で、OnValidatingがキャセンルされたら二回目のOnValidatingが来てもValidatingイベントを
    呼ばないようにしてみました。

    VBは得意でないので、C#

    public class TextBoxEx : TextBox
    {
    const int WM_LBUTTONDOWN = 0x0201;
    const int WM_LBUTTONUP= 0x0202;
    static bool IsMouseDown = false;
    static bool canceled = false;

    protected override void WndProc(ref Message m)
    {
    if (m.Msg == WM_LBUTTONDOWN) {
    IsMouseDown = true;
    canceled = false;
    }

    base.WndProc(ref m);

    if (m.Msg == WM_LBUTTONUP) {
    IsMouseDown = false;
    }
    }

    protected override void OnValidating(System.ComponentModel.CancelEventArgs e)
    {
    if (IsMouseDown && canceled) {
    e.Cancel = true;
    } else {
    base.OnValidating(e);
    canceled = e.Cancel;
    }
    }
    }
記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56289  Re[12]: UserControlとValidatingについて
□投稿者/ KK -(2011/01/07(Fri) 22:34:57)
    todo 様
    > VBは得意でないので、C#
     違った言語の中で、サンプルまで
     本当にありがとうございます。
     自分なりに、VBに変更してみました。
    
    ******************************************************************
    Module Module1
        Public IsMouseDown As Boolean = False
        Public Canceled As Boolean = False
    End Module
    
    Public Class TextBoxEx
        Inherits TextBox
    
        Private Const WM_LBUTTONDOWN As Integer = &H201
        Private Const WM_LBUTTONUP As Integer = &H202
    
        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    
            If m.Msg = WM_LBUTTONDOWN Then
                IsMouseDown = True
                canceled = False
            End If
    
            MyBase.WndProc(m)
    
            If m.Msg = WM_LBUTTONUP Then
                IsMouseDown = False
            End If
    
        End Sub
    
        Protected Overrides Sub OnValidating(ByVal e As System.ComponentModel.CancelEventArgs)
    
            If IsMouseDown And canceled Then
                e.Cancel = True
            Else
                MyBase.OnValidating(e)
                canceled = e.Cancel
            End If
    
        End Sub
    End Class
    ******************************************************************
    
    >	static bool IsMouseDown = false;
    >	static bool canceled = false;
    userTextBoxEx1とTextBoxEx1で、共通のフラグかと思い、
    大雑把でありますが、Module変数にしてみました。
    ※あまり行わない方がいいと思いますが、
      別の方法が思いつかなかったもので・・。
    
    教えていただいたサンプルで、Validatingイベントの発生を1回にできました。
    本当にありがとうございます。
    
    再度、自分なりにいろいろチェックしてみます。
    
    
    >todo様
    違った言語の自分に、
    チェックの仕方等、ご親切に教えていただき
    誠にありがとうございます。
    
    自分で、理解できていない関数等を調べて
    自分なりに再度理解していきます。
    
    >shu 様
    自分のために、
    貴重な時間を割いて
    教えていただき 本当にありがとうございました。
    
    
    ※皆さんに教えていただいたことを
    もう一度自分なりに整理し、そのあとで解決済みをチェックさせていただきたいと思います。
    
    もし、自分のサンプルでお気づきの点等ございましたら
    また教えていただければ幸いです。
    
記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56293  Re[13]: UserControlとValidatingについて
□投稿者/ よねKEN -(2011/01/08(Sat) 00:36:36)
    2011/01/08(Sat) 00:38:34 編集(投稿者)

    継承元がUserControlでないといけない理由が特になければ、継承元をPanelにしてはどうでしょうか。
    UserControlはContainerControlを継承しており、このContainerControlが独自のフォーカス制御を
    やっているため、件のような現象が起きます。

    ●UserControlの継承階層
    System.Object
    System.MarshalByRefObject
    System.ComponentModel.Component
    System.Windows.Forms.Control
    System.Windows.Forms.ScrollableControl
    System.Windows.Forms.ContainerControl
    System.Windows.Forms.UserControl

    ● UserControlから順に派生元クラスに変更して実験してみる
    継承元がUserControlだと現象が発生する

    継承元がContainerControlだと現象が発生する

    継承元がScrollableControlだと現象が発生しない★

    --
    ちなみにこのご提案はGoogleで「UserControl フォーカス」で
    検索して見つけた情報を元にして追加検証したものです。
    #っていうか、魔界の仮面弁士さんの回答まるぱくり(汗)

    ●参考にした情報
    ↓同じ現象と思われる質問が別掲示板で過去にあった。でも未解決
    ユーザコントールのNETのバグ? - Insider .NET会議室
    http://ap.atmarkit.co.jp/bbs/core/fdotnet/17010

    ↓カスタムコントロールをアクティブにさせないようにするには?
    http://hpcgi1.nifty.com/MADIA/vbnet/wwwlng.cgi?print+200711/07110011.txt
記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56297  Re[14]: UserControlとValidatingについて
□投稿者/ KK -(2011/01/08(Sat) 11:57:31)
    よねKEN 様
    > 検索して見つけた情報を元にして追加検証したものです。
    いろいろ調べていただいて、本当ありがとうございます。
    
    >●参考にした情報
    >↓同じ現象と思われる質問が別掲示板で過去にあった。でも未解決
    >ユーザコントールのNETのバグ? - Insider .NET会議室
    >http://ap.atmarkit.co.jp/bbs/core/fdotnet/17010
    自分なりに、教えて頂いた情報をもとにテストしてみました。
    
    >> UserControl11.CausesValidation = False
    > これが、ユーザー コントロールの中のコントロールにまで伝播するかどうかわかりませんが、ユーザー コントロールへフォーカスが移動することによる検証処理は行わないので、
    >> 3.ユーザコントロールの時は、最初の1回目のボタンクリックだけは期待通りになりますが
    >ここがすでにおかしいように思います。
    >テキストボックスの Validating イベントも発生していないのでしょうか。ブレーク ポイントを張って、確認ししてください。NG の方へ流れていないのだと思います。
    
    掲示板で、Jitta様がおっしゃられている内容の問題なのかなと感じましたが、
    自分のテストの仕方がまずかったのでしょうか。
    
    > 継承元がUserControlでないといけない理由が特になければ、継承元をPanelにしてはどうでしょうか。
    今回のようなTextBoxの変更以外にも、別の問題が発生する可能性もありますね。
    ただ、以下のようなことができるのがUserControlという頭でしたので・・・。
    Panelを変更して以下のようなことも可能なのでしょうか。
    再度調べてみます。
    
    ・複数のコントロールを1つにまとめる。
    ・デザイナでレイアウト調整
    ・共通コントロールとして利用。
     
記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56299  Re[15]: UserControlとValidatingについて
□投稿者/ KK -(2011/01/08(Sat) 17:26:25)
    >todo様 shu様 よねKEN様
    
    皆さんに教えていただいたことを、
    参考にいろいろ確認してみたところ以下のことがわかりました。
    
    A(ContainerControlを継承したControl上に設置されたControl)から、
    B(別のContainerControlを継承したAとは別のControl上に設置されたTextBox)に左クリックで、
    フォーカスを移動するとAのValidatingイベントが1〜2回発生するようです。
    (Validatingイベントキャンセル時のみ)
    
    例)Form上に設置されたTextBox、ComboBoxからSplitContainer、UserControl上のTextBoxに
       クリックでフォーカスを移すとValidatingイベントが1〜2回発生。
    
    ※すべてのControlを確認できているわけでは、ありませんのでご注意を。
    
    で、
    以下のように 作成してみました。
    ***************************************************************************************************
    Module Module1
        Public IsMouseDown As Boolean = False
        Public Canceled As Boolean = False
    End Module
    
    Public Class TextBoxEx
        Inherits TextBox
    
        Private Const WM_LBUTTONDOWN As Integer = &H201
        Private Const WM_LBUTTONUP As Integer = &H202
    
        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    
            If m.Msg = WM_LBUTTONDOWN Then
                IsMouseDown = True
                Canceled = False
            End If
    
            MyBase.WndProc(m)
    
            If m.Msg = WM_LBUTTONUP Then
                IsMouseDown = False
            End If
    
        End Sub
    
        Protected Overrides Sub OnValidating(ByVal e As System.ComponentModel.CancelEventArgs)
    
            If IsMouseDown And canceled Then
                e.Cancel = True
            Else
                MyBase.OnValidating(e)
                Canceled = e.Cancel
            End If
    
        End Sub
    
    End Class
    
    ----------------------------------------
    Validatingのチェックが必要になるコントロールに
    OnValidatingの修正が必要。
    
    Public Class CheckBoxEx
        Inherits CheckBox
    
        Protected Overrides Sub OnValidating(ByVal e As System.ComponentModel.CancelEventArgs)
            If IsMouseDown And Canceled Then
                e.Cancel = True
            Else
                MyBase.OnValidating(e)
                Canceled = e.Cancel
            End If
        End Sub
    End Class
    
    もしくは、フォーム上に配置されたControlのValidatingイベントに
    上記のような条件でチェックを回避する処理が必要かと思います。
    ----------------------------------------
    ***************************************************************************************************
    
    
    >todo様 shu様 よねKEN様
    皆様 色々教えていただき、本当にありがとうございます。
記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56315  Re[15]: UserControlとValidatingについて
□投稿者/ よねKEN -(2011/01/09(Sun) 14:28:53)
    No56297 (KK さん) に返信
    > ・複数のコントロールを1つにまとめる。

    まとめるだけなら、どんなControlでも可能です。
    (Control.Controlsプロパティがあるから)

    > ・デザイナでレイアウト調整

    お使いになっているVisul Studioのバージョン&エディションで検証しての確認が必要ですが、試した範囲ではできないようです。
    (VS2008でカスタムコントロールを選んでみましたが、複合コントロールを作るようにはデザイナが想定されていないようです)

    > ・共通コントロールとして利用。

    プログラムの動作上の問題はありません。

    共通で利用するタイプのコントロールを作成する手段にはユーザコントロールとカスタムコントロールがあり、
    UserControl以外のコントロールを継承して作るやり方がカスタムコントロールです。

    先も書きましたが、カスタムコントロールに対するデザイナのサポートがないようなので、
    コードエディタで手書きする必要があるようです。
記事No.56238 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56340  Re[16]: UserControlとValidatingについて
□投稿者/ KK -(2011/01/11(Tue) 11:04:48)
    よねKEN 様
    返事が遅くなり、申し訳ありませんでした。

    色々ご確認いただき、本当にありがとうございます。
    自分でも調べてましたが、デザイナ上での変更は難しそうでした。

    >先も書きましたが、カスタムコントロールに対するデザイナのサポートがないようなので、
    >コードエディタで手書きする必要があるようです。
    今回はtodo様の方法で、作成していこうと思います。

    ※ContainerControlを継承したControl上でも利用できそうですので。

    >todo様 shu様 よねKEN様
    皆様 色々教えていただき、本当にありがとうございました。
記事No.56238 のレス / END /過去ログ94より / 関連記事表示
削除チェック/

■56327  日付の表示をyyyy/mm/ddに戻したい
□投稿者/ ペンギン -(2011/01/10(Mon) 16:07:44)

    分類:[.NET 全般] 

    こんにちは

    現在システムのWindows7対応で、
    OSのバージョンアップに伴うアプリケーション側の改修を行っております。

    ■環境
     [旧環境]
      OS:WindowsXP
      開発ツール:VisualStudio2003
      開発言語:C#
      ミドルウェア:.NetFrameWork1.1
      Oracle:OracleDatabase 9.2.0.8
          Oracle Client 9.2.0.8
          Oracle Data Provider for .NET 9.2.0.4.0
          Oracle Provider for OLE DB 9.2.0.4.0

     [新環境]
      OS:Windows7
      開発ツール:VisualStudio2010
      開発言語:C#
      ミドルウェア:.NetFrameWork4.0
      Oracle:OracleDatabase 9.2.0.8
          Oracle Client 11.2.0
          Oracle Data Provider for .NET 4 11.2.0.1.2
          Oracle Provider for OLE DB 11.2.0.1.0

    ■現象
     日付の表示が以下のように変更してしまいます。
     
     旧環境→2010/12/31
     新環境→2010年12月31日
     
    ■質問
     新環境での日付表示を旧環境と同様のyyyy/mm/ddにしたいです。
     変更方法を教えて頂けないでしょうか。
     
    ■参考
     日付表示は以下のようにグリッドにパラメータをセットして実施しております。
     
    --------------------------------------------------------------------------------
    DataColumn dcc = new DataColumn();
    dcc = new DataColumn(namee, System.Type.GetType("System.DateTime"));
    dcc.AllowDBNull = true;
    dcc.DefaultValue = null;
    dcc.Caption = namej;
    dcc.ColumnName = namee;
    PB.DATA_DS.Tables[frmID].Columns.Add(dcc);
    --------------------------------------------------------------------------------
親記事 /過去ログ94より / 関連記事表示
削除チェック/

■56328  Re[1]: 日付の表示をyyyy/mm/ddに戻したい
□投稿者/ ペンギン -(2011/01/10(Mon) 16:12:49)
    何か足りない情報がございましたら補足します。

    よろしくお願いします。
記事No.56327 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56329  Re[2]: 日付の表示をyyyy/mm/ddに戻したい
□投稿者/ Hongliang -(2011/01/10(Mon) 16:50:05)
    DateTime 型には、その日付をどう表示するかなんて情報はありません。
    ある日時型のデータをどう表示するかは、そのデータを表示する側の担当です。
    アプリケーションは、特に指定していなければ OS の「地域と言語」設定で指定されている表示形式を使用します。
    あるいはコントロール個別に表示形式を指定する場合、たとえば System.Windows.Forms.DataGrid であればDataGridTextBoxColumn.Format プロパティ(および FormatInfo プロパティ)で指示できます。
記事No.56327 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56330  Re[3]: 日付の表示をyyyy/mm/ddに戻したい
□投稿者/ ペンギン -(2011/01/10(Mon) 18:48:41)
    ご返信ありがとうございます。

    当問題ですが、OS の「地域と言語」設定の「時刻(長い形式)」を変更することで、
    旧バージョンと同様にyyyy/mm/ddで表示することが出来ました。
    yyyy/mm/ddで表示される設定は以下の通りです。

    yyyy'年'M'月'd'日'→×
    yyyy'年'MM'月'dd'日'→×
    yyyy'年'M'月'd'日' dddd→○
    yyyy'年'MM'月'dd'日' dddd→○

    旧環境で試したところ、「時刻(短い形式)」の変更が反映されていたため、
    .NetFramework1.1から2.0へバージョンアップした際に
    「時刻(長い形式)」を参照するようになったということでしょうか。

    http://itpro.nikkeibp.co.jp/article/COLUMN/20061127/254970/

    問題は解決しました。どうもありがとうございました。
記事No.56327 のレス / END /過去ログ94より / 関連記事表示
削除チェック/

■56331  Re[4]: 日付の表示をyyyy/mm/ddに戻したい
□投稿者/ よねKEN -(2011/01/10(Mon) 19:26:54)
    No56330 (ペンギン さん) に返信
    > 旧環境で試したところ、「時刻(短い形式)」の変更が反映されていたため、
    > .NetFramework1.1から2.0へバージョンアップした際に
    > 「時刻(長い形式)」を参照するようになったということでしょうか。

    特にそういう変更にはなっていないと思います。

    老婆心ながら、そもそもの話として、環境依存の動作をさせたくないところの処理で、
    環境によって正しく動作しないのはぺんぎんさんの所のプログラムの元々の障害だと思われます。
    OSの環境をいじって解決とするのではなく、根本的な問題を抱えているプログラムを修正された方がよいと思いますよ。

    #設計者やお客様と相談の上、そのような対処になったのであれば仕方ありませんが、
    #障害の根本原因を取り除いていないのは後々のトラブルの元です。そういう解決手段は最終手段とした方がよいです。

記事No.56327 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56332  Re[5]: 日付の表示をyyyy/mm/ddに戻したい
□投稿者/ shu -(2011/01/10(Mon) 21:09:07)
    No56331 (よねKEN さん) の返信を参考にしてもらうとして

    Labelなどに表示する為の文字列変換は以下のようになります。
    Dim dtTmp as Date
    dtTmp = ・・・・

    Label1.Text = dtTmp.ToString("yyyy/MM/dd") '<--- mmではない。


    表示するコントロールにより日付の表示形式を指定出来る場合もあります。
    No56329 (Hongliang さん) の内容を参考
記事No.56327 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56333  Re[6]: 日付の表示をyyyy/mm/ddに戻したい
□投稿者/ Azulean -(2011/01/10(Mon) 21:48:48)
記事No.56327 のレス /過去ログ94より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 >>

ヒット件数が多いので過去ログ1〜94 までの検索結果 / 過去ログ95からさらに検索→

パスワード/

- Child Tree -