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

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

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

全過去ログを検索

<< 0 | 1 | 2 >>
■11563  Re[4]: カスタムコントロールでコレクション内アイテム追加時の再描画
□投稿者/ 渋木宏明(ひどり) -(2007/12/18(Tue) 00:12:20)
>
    > System.Collection.ObjectModel.Collection<T> を派生して HogeItemCollection を作成し、
    >
    > ・ClearItems
    > ・InsertItem
    > ・RemoveItem
    > ・SetItem
    >
    > の4メソッドをオーバーライドして、項目の追加/削除が発生した際に ItemAdded, ItemRemoved イベントを上げるようにすればよろしんじゃないかと。

    毎回オリジナルのコレクションを作るのはバカくさいので、ItemAdded, ItemRemoved イベントを上げるように拡張した Collection<T> を作って使いまわしています>自分
記事No.11505 のレス /過去ログ25より / 関連記事表示
削除チェック/

■13829  Re[5]: DBNullの入ったDataRowをExcelに出力
□投稿者/ 春紫苑 -(2008/02/05(Tue) 14:47:14)
    しまった。頭が茹っていたせいで、環境を書いてませんでした。
    Windows Vista, Visual Studio 2005, C# です。

    No13800 (特攻隊長まるるう さん) に返信
    > 2008/02/05(Tue) 07:56:02 編集(投稿者)
    >
    > ■No13787 (春紫苑 さん) に返信
    >>DBNull のときはセルを空にしなければいけないため頭を悩ませています。
    > Nothing を設定?

    C# なので Nothing の代わりになるのは Type.Missing や Missing.Value
    ですが、ためしにこれをそのまま使っても駄目でした。

    いろいろと調べてみても、やはり列に違う型が混在する場合、
    その箇所だけはセル単位で値をセットする方法がほとんどでした。

    DBNull が混在してようが一括でセットしようというのは
    やはり無理なのでしょうか…。
記事No.13781 のレス /過去ログ29より / 関連記事表示
削除チェック/

■22881  Re[2]: EclipseCDT+Pocoの設定方法
□投稿者/ さんた -(2008/08/05(Tue) 11:45:42)
    No22877 (επιστημη さん) に返信
    >>環境はEclipse3.4+CDT+MinGW3.4.5+WindowsXPにてPoco1.3.2dataです。
    >>PocoはMicrosoft Visual C++ 2005 Express EditionにてコンパイルしたLibとDLLがあり、
    >
    > 確認/質問です。
    > MinGWは VC++で作ったLib/DLL を呑んでくれるのですか?
    >

    レスありがとうございます。
    その点について全く考えていなかったので、調べてみたところNGでした。
記事No.22862 のレス /過去ログ43より / 関連記事表示
削除チェック/

■23555  Re[5]: DomainUpDownコントロールについて
□投稿者/ もょもと -(2008/08/18(Mon) 16:10:58)
    2008/08/18(Mon) 16:30:03 編集(投稿者)

    .Items.AddRange()で下記のようになったものを、

    Index値   value   処理
     0      a    あ();
     1      b    い();
     2      c    う();
     3      d    え();

    .Items.Reverse()で下記のようにしたわけですが、

    Index値   value   処理
     0      d    あ();
     1      c    い();
     2      b    う();
     3      a    え();

    実際には下記のようになって欲しかった、という解釈でよろしかったでしょうか。

    Index値   value   処理
     3      d    え();
     2      c    う();
     1      b    い();
     0      a    あ();

    その場合、switch(SelectedIndex)か何かで処理を分岐させているのでしたら、
    単純にCaseの中身を入れ替えてはどうでしょうか。

    int i = domainUpDown1.SelectedIndex;
    switch (i)
    {
    case 1:
    {
    あ()
    break;
    }
    case 2:
    {
    い()
    break;
    }
    case 3:
    {
    う()
    break;
    }
    case 4:
    {
    え()
    break;
    }
    }

    だったら…

    int i = domainUpDown1.SelectedIndex;
    switch (i)
    {
    case 1:
    {
    え()
    break;
    }
    case 2:
    {
    う()
    break;
    }
    case 3:
    {
    い()
    break;
    }
    case 4:
    {
    あ()
    break;
    }
    }

    みたいに。
記事No.23536 のレス /過去ログ44より / 関連記事表示
削除チェック/

■47702  Re[3]: DateTimePickerを日付/時刻型へ
□投稿者/ 魔界の仮面弁士 -(2010/03/11(Thu) 15:53:54)
    No47699 (QT さん) に返信
    > 間違いが多く申し訳ないです。ご指摘の通り訂正させていただきます。
    とはいえ、本筋は特に間違っていませんでしたよ。
    最初のサンプルそのままでも、正しく更新できましたし。
    
    
    > SQLは他にもフィールドがあるので、実際とは違いますが
    質問時にそれは避けましょう。問題の切り分けが難しくなってしまいます。
    
    どこかに見落としがあるといけませんので、
    テーブル名/列名などの定義も、今回提示したサンプルとすべて同じにして、
    先のコードをもう一度実行してみてください。
    
    
    >>>実際に反映されるのは1899/12/29もしくは0:00:00です。
    これも妙なんですよね…。
    
    その値だと、数値的には -1 or 0 が渡されたことになっていますので、多分、どこかの箇所で
    日付のかわりに YES or NO (あるいは TRUE or FALSE)が渡されているものと予想されます。
    (YES/NO 型の内部値は -1 / 0 です)
    
    
    ちなみに、DATE 型の内部値は以下の通り。
    
     −2.00 … 1899/12/28 00:00:00
    
     −1.75 … 1899/12/29 18:00:00
     −1.50 … 1899/12/29 12:00:00
     −1.25 … 1899/12/29 06:00:00
     −1.00 … 1899/12/29 00:00:00
    
     −0.75 … 1899/12/30 18:00:00
     −0.50 … 1899/12/30 12:00:00
     −0.25 … 1899/12/30 06:00:00
      0.00 … 1899/12/30 00:00:00
     ±0.25 … 1899/12/30 06:00:00
     ±0.50 … 1899/12/30 12:00:00
     ±0.75 … 1899/12/30 18:00:00
    
     +1.00 … 1899/12/31 00:00:00
     +1.25 … 1899/12/31 06:00:00
     +1.50 … 1899/12/31 12:00:00
     +1.75 … 1899/12/31 18:00:00
    
     +2.00 … 1900/01/01 00:00:00
記事No.47695 のレス /過去ログ80より / 関連記事表示
削除チェック/

■83507  Re[1]: RS232C LAN USBを使用したプログラム
□投稿者/ 774RR -(2017/03/25(Sat) 18:33:44)
    通信の理解といっても色々あって OSI でいえば7層 DARPA なら4層に分類されているんだが、
    どこをどんな風に理解したい?

    とりあえず TCP や UDP なら(つまり LAN ってことで)あなたの PC 1つあれば十分実験できるので
    初期投資が少なくて済む、んでないかな。

    RS232 (EIA574) だとあまりにも物理層が見える(見なきゃ話が進まない)とか
    USB だと逆に物理層を扱うのは困難(一般プログラマ的には十分抽象化されていて通信を意識する必要はない)
    とオイラは思う。

    telnet で http サーバに手接続する、ってあたりから始めるのが手っ取り早そう。

    ブツが必要ってことだと Raspberry pi でも買ってくれば LAMP 一式を構築できるし、
    自分でそういうのが構築できるほど勉強できるなら大いに元は取れると思う。
記事No.83505 のレス /過去ログ142より / 関連記事表示
削除チェック/

■90434  AddHandler Eventの別スレッドについて
□投稿者/ TanuTanu -(2019/03/11(Mon) 14:26:17)

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

    2019/03/11(Mon) 14:31:28 編集(投稿者)
    2019/03/11(Mon) 14:31:21 編集(投稿者)

    度々、質問してしまい申し訳ありません。
    欲が出てしまい『■90409 VB.NETのHTMLDocumentイベントについて』 で追加しましたイベント
    を別スレッドで動作させたいのですが出来ますでしょうか?

    下記コードでは、buttonをクリックした後、webページダイアログが表示され
    そのwebページダイアログを閉じた後にMessageBoxが表示されてしまい困っております。

    何卒、ご教授の程宜しくお願いいたします。


    Dim Button As mshtml.IHTMLElement = doc.all.item("button")
    Event1 = DirectCast(Buttoni, mshtml.HTMLInputTextElementEvents2_Event)
    AddHandler Event1.onclick, AddressOf WebDisp_click

    Private Function WebDisp_click(ByVal e As mshtml.IHTMLEventObj) As Boolean

    Dim t As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf DoSomething))
    t.SetApartmentState(System.Threading.ApartmentState.STA)
    t.Start()

    End Function

    Private Sub DoSomething()

    MessageBox.Show("webDisp_onclick")

    End Sub

    開発環境、使用言語、開発者LV:VS2017、VB.NET、ビギナー
親記事 /過去ログ156より / 関連記事表示
削除チェック/

■90439  Re[1]: AddHandler Eventの別スレッドについて
□投稿者/ 魔界の仮面弁士 -(2019/03/11(Mon) 18:02:21)
    No90434 (TanuTanu さん) に返信
    > Dim Button As mshtml.IHTMLElement = doc.all.item("button")
    この場合、Option Strict Off にしないとコンパイルできなくなりますね。


    > Event1 = DirectCast(Buttoni, mshtml.HTMLInputTextElementEvents2_Event)
    変数名が違うようですが、ここの "Buttoni" とその直前の "Button" は同じものですか?


    > AddHandler Event1.onclick, AddressOf WebDisp_click
    この Event1 はローカル変数でしょうか。クラスのインスタンスフィールドでしょうか。
    ローカル変数だとしたら、GC されて切断されることを防ぐため、フィールド変数に変更して
    イベント通知が不要になるまで、インスタンスを保持しておく必要があります。


    > 下記コードでは、buttonをクリックした後、webページダイアログが表示され
    元の Web ページ側にダイアログ表示のスクリプトがあるのだと思いますが、
    JavaScript 側で既に onclick イベントが割り当てられている場合、
    そちらの処理が先に発生し、VB 側に通知されるのはその後になるかと思います。
    (イベントの割り当て方法にもよりますが)


    > Private Function WebDisp_click(ByVal e As mshtml.IHTMLEventObj) As Boolean
    戻り値を返し忘れていますよ。


    > 欲が出てしまい『■90409 VB.NETのHTMLDocumentイベントについて』 で追加しましたイベント
    > を別スレッドで動作させたいのですが出来ますでしょうか?
    button 要素 の onclick イベントに割り当てたいようですが、どの部分をどのスレッドで動作させたいのでしょうか。

    (1) WebDisp_click を、UI スレッド上で実行したい
    (2) WebDisp_click を、特定のワーカースレッドで呼び出したい
    (3) WebDisp_click を、その都度、新しいスレッドで呼び出したい
    (4) Sub DoSomething が、UI スレッド上で呼びだされるようにしたい
    (5) Sub DoSomething が、特定のワーカースレッドで呼び出したい
    (6) Sub DoSomething が、その都度、新しいスレッドで呼び出したい
    (7) 「MessageBox」の呼び出し部のみを、UI スレッドで実行させたい
    (8) 「MessageBox」の呼び出し部のみを、特定のワーカースレッドで呼び出したい
    (9) 「MessageBox」の呼び出し部のみを、その都度、新しいスレッドで呼び出したい

    イベントの発火にしろ、デリゲートの呼び出しにせよ、それが実行されるスレッドは、
    「イベント通知を受け取る側/デリゲートインスタンスの生成側」でコントロールするものではなく、
    「イベントを発生させる側/デリゲートでメソッドを呼び出す側」でコントロールするものかと。


    たとえば RaiseEvent だとしたら、基本的には「イベントの発生元」のスレッドが使われるので、
    他スレッドへのイベント通知が必要なら、ISynchronizeInvoke を使うなどします。


    呼び出し元に頼らず、イベントを受け取った側で他のスレッドに処理したいなら、
    自身を該当スレッド上で Invoke しなおすことで対処してみてください。
    たとえば、常に UI スレッド上で処理を行いたいなら、InvokeRequired で判定して Invoke しなおすとか。
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90440  Re[2]: AddHandler Eventの別スレッドについて
□投稿者/ TanuTanu -(2019/03/11(Mon) 20:50:47)
    魔界の仮面弁士 様

    お世話になっております。
    返信遅れ申し訳ありません。
    自分がもしかしてとんでもなく難しい事しようとしているのでは?
    と暫く思考停止になっていました。

    ご教授いただいた下記内容でトライしてみようと思います。
    >常に UI スレッド上で処理を行いたいなら、InvokeRequired で判定して Invoke しなおすとか。

    まだ調査始めたばかりですがC#ばかりでVBの参考サイトが少なく苦慮しておりますが
    いろいろ調べてみようと思います。
    この度はご教授頂けて本当に助かりました。
    解決致しましたら改めてご報告致しますので宜しくお願いいたします。

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

■90441  Re[1]: AddHandler Eventの別スレッドについて
□投稿者/ Azulean -(2019/03/11(Mon) 21:06:30)
    ご自身がやりたいことを端的に書かないと、迷走しますよ。

    No90434 (TanuTanu さん) に返信
    > 下記コードでは、buttonをクリックした後、webページダイアログが表示され
    > そのwebページダイアログを閉じた後にMessageBoxが表示されてしまい困っております。

    本題はこの部分ですよね?

    現状:ボタンクリック後、Web ページダイアログの次に MessageBox が表示される
    希望:ボタンクリック後、MessageBox が表示され、Web ページダイアログが表示される、または MessageBox だけが表示される

    この希望の実現方法に、実は「別スレッド」と言うことは関係していません。
    知らない状態でそれに気づくことは難しいと思いますが、なおのこと、「現状と実現したいこと」と「試したこととどうなったか」は明確に分離しておかないと、脱線・迷走します。


    なお、この「希望」の認識が合っていた場合、魔界の仮面弁士さんの以下の部分が現状を説明していますs。

    > 元の Web ページ側にダイアログ表示のスクリプトがあるのだと思いますが、
    > JavaScript 側で既に onclick イベントが割り当てられている場合、
    > そちらの処理が先に発生し、VB 側に通知されるのはその後になるかと思います。
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90444  Re[2]: AddHandler Eventの別スレッドについて
□投稿者/ TanuTanu -(2019/03/12(Tue) 11:11:41)
    Azulean 様

    ご教授ありがとうございます。

    ■現状

    @ある画面のボタンを手動でクリック
    Aそのボタンのonclick イベント発生
    B上記ScriptによりWebページダイアログ表示
    C手動でWebページダイアログ閉じる
    DMessageBox.Show("webDisp_onclick")作動

    ■実現したい事

    @ある画面のボタンを手動でクリック
    Aそのボタンのonclick イベント発生
    B上記ScriptによりWebページダイアログ表示 & MessageBox.Show("webDisp_onclick")作動

    ---------------------------------

    ■試した事

    WithEvents doc As mshtml.HTMLDocumentClassでfocusoutイベントをキャッチし
    MessageBox.Show("webDisp_onclick")を作動。
    この方法では上記実現したい事は実現しますが、ボタンをクリックしなくても
    フォーカスアウトする度にイベントが発生してしまうので
    MessageBox.Show("webDisp_onclick")の作動条件式が必要になります。

    ---------------------------------

    もし可能であれば、focusoutイベントではなくボタンクリックのAttachEventHandler等で実現したい。

    魔界の仮面弁士 様、Azulean 様のご解答では
    > そちらの処理が先に発生し、VB 側に通知されるのはその後になるかと思います。
    であるように基本不可能と思って間違いないでしょうか?
    であれば上記■試した事で作動条件式を作っていく方法で進めたいと思います。

    今回、多くの事を教えて頂いたのでそちらも学習したいと思います。
    ありがとうございました。
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90446  Re[3]: AddHandler Eventの別スレッドについて
□投稿者/ PANG2 -(2019/03/12(Tue) 12:31:54)
    2019/03/12(Tue) 12:36:54 編集(投稿者)

    No90444 (TanuTanu さん) に返信
    >>そちらの処理が先に発生し、VB 側に通知されるのはその後になるかと思います。
    > であるように基本不可能と思って間違いないでしょうか?

    C#/WebBrowser でイベントの発生順を変えてみました。

    private void Form1_Load(object sender, EventArgs e)
    {
    this.webBrowser1.DocumentText
    = "<html><body><input id=button1 type=button onclick=\"alert('hello1')\"></body></html>";
    }

    private void webBrowser1_DocumentCompleted(object sender, EventArgs e)
    {
    HtmlElement button = webBrowser1.Document.GetElementById("button1");
    #if false
    button.Click += delegate {
    MessageBox.Show("hello2");
    };
    #else
    string script = ((dynamic)button.DomElement).attributes("onclick").value; //onclickイベントのスクリプト
    button.SetAttribute("onclick", "");//onclickイベントをクリア
    button.Click += delegate {
    MessageBox.Show("hello2");
    webBrowser1.Navigate("javascript:" + script);//元のonclickイベントを実行
    };
    #endif
    }
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90452  Re[4]: AddHandler Eventの別スレッドについて
□投稿者/ TanuTanu -(2019/03/12(Tue) 13:17:24)
    PANG2 様

    ご教授ありがとうございます。

    その方法は禁断だったのですが・・・

    魔界の仮面弁士 様、Azulean 様の下記コメにもあるようにその方法しか残されていないのかもしれませんね。
    特にビギナーの私にはそれが一番シンプルですし、、、

    >イベントの発火にしろ、デリゲートの呼び出しにせよ、それが実行されるスレッドは、
    >「イベント通知を受け取る側/デリゲートインスタンスの生成側」でコントロールするものではなく、
    >「イベントを発生させる側/デリゲートでメソッドを呼び出す側」でコントロールするものかと。

    もう暫く検討してみて対処方法が他になければPANG2 様にご教授頂いた方法で進めようと思います。

    ありがとうございました。
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90454  Re[3]: AddHandler Eventの別スレッドについて
□投稿者/ 魔界の仮面弁士 -(2019/03/12(Tue) 14:24:57)
    No90444 (TanuTanu さん) に返信
    この掲示板では、新規投稿時の注意書きに
     『半角カナは使用しないでください。文字化けの原因になります。』
    と記載されておりますので、以後の投稿では、
    カタカナを全角表記に統一していただけるとありがたいです。


    > @ある画面のボタンを手動でクリック

    具体例となるものが欲しかったのですが……とりあえずこちらで提示してみます。

    下記は onclick 時に、JavaScript 側で confirm メソッドが呼ばれており、
    それによって Web ページダイアログが表示される仕様になっています。
    ダイアログで OK するとページ遷移、Cancel では何もしないというものです。
    https://www.javadrive.jp/javascript/event/sample2_1.html


    対してこちらは、onclick と addEventListener の併用です。
    Web ページダイアログを表示させるコードは含まれていませんが、
    ボタンを押すたびにテキストが書き込まれるようになっています。
    https://ozepon.github.io/onclick_vs_addEventListener/



    > もし可能であれば、focusoutイベントではなくボタンクリックのAttachEventHandler等で実現したい。

    mshtml に、そんなメソッドありましたっけ?

    もしかして、System.Windows.Forms.HtmlElement クラスの AttachEventHandler のことでしょうか。
    No90410 はマネージ WebBrowser の話であり、今回のような、 COM の InternetExplorer や WebBrowser には
    直接的には関係ありません。(マネージ版も内部で COM を呼んでいるので、間接的には関係ありますが)


    IHTMLDocument3 の attachEvent メソッドや、
    IEventTarget の addEventListener メソッドの事だとしたら、
    レンダリングされている HTML ドキュメントに応じて、
     IE5〜IE8 モードの場合 → attachEvent のみをサポート
     IE9〜IE10 モードの場合 → attachEventとaddEventListenerをサポート
     IE11 モードの場合 → addEventListener のみをサポート
    だったはず。

    また、イベントは登録した順に割り当てられるものであり、発生順を変えることは基本的にできません。

    onclick だけなら、イベントの付け外しも比較的容易なのですが、
    attachEvent / addEventListener の場合、detachEvent / removeEventListener するには、
    登録したリスナー(イベントハンドラとなる function オブジェクト)を入手する手段が必要で。

    同一要素に対してイベントを割り当てるのではなく、
    親要素・子要素に対してイベントを割り当てるという手はありますが、
    いずれにせよ、ページの作りにも左右される事になると思います。
    https://qiita.com/hosomichi/items/49500fea5fdf43f59c58
    https://qiita.com/landrunner/items/ab162e305fa2e279c219
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90455  Re[4]: AddHandler Eventの別スレッドについて
□投稿者/ 魔界の仮面弁士 -(2019/03/12(Tue) 14:31:26)
    2019/03/12(Tue) 14:41:42 編集(投稿者)

    No90452 (TanuTanu さん) に返信
    > 魔界の仮面弁士 様、Azulean 様の下記コメにもあるようにその方法しか残されていないのかもしれませんね。

    スレッド管理の話とイベントの発生順の話は無関係ですよね…?


    質問内容は「イベントの発生順を変更したい」ということではないのでしょうか。

    それともイベントの発生順は JavaScript → VB の順番のままで構わないので、
    VB 側のイベント処理を「別スレッドで処理させたい」という質問なのでしょうか。



    No90454 (魔界の仮面弁士 ) に追記
    > また、イベントは登録した順に割り当てられるものであり、発生順を変えることは基本的にできません。
    >
    > onclick だけなら、イベントの付け外しも比較的容易なのですが、

    とりあえず
     https://www.javadrive.jp/javascript/event/sample2_1.html
    に対するサンプル。


    Option Strict On
    Public Class Form1
     Private doc As mshtml.HTMLDocument
     Private yahooButton As mshtml.IHTMLElement
     Private Event1 As mshtml.HTMLInputTextElementEvents2_Event

     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim o As Object = GetIEDocument( ターゲットのHWND ) ' No90411 を参照
      doc = DirectCast(o, mshtml.HTMLDocument)
      yahooButton = DirectCast(doc.all.item("yahoo"), mshtml.IHTMLElement)
      Event1 = DirectCast(yahooButton, mshtml.HTMLInputTextElementEvents2_Event)
      AddHandler Event1.onclick, AddressOf WebDisp_click
     End Sub

     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      yahooButton.click()
     End Sub

     Private Function WebDisp_click(ByVal e As mshtml.IHTMLEventObj) As Boolean
      MsgBox("webDisp_onclick", MsgBoxStyle.SystemModal)
      Return True
     End Function
    End Class


    この場合、input type="button" に対する onclick が割り当て済みなので、
    その後で VB からイベントにアタッチしても、JavaScript 側の処理が先に実行されます。
    そのため VB の WebDisp_click が呼ばれるのは、Web ページダイアログが閉じられた後になります。


    上記の順番を入れ替えて、VB 側で捕らえてから JavaScript 側の処理を実行させるようにするなら、たとえばこんな感じ。


    Option Strict On
    Public Class Form1
     Private doc As mshtml.HTMLDocument
     Private yahooButton As mshtml.IHTMLElement
     Private Event1 As mshtml.HTMLInputTextElementEvents2_Event
     Private yahooButton_onclick As Object

     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim o As Object = GetIEDocument( ターゲットのHWND ) ' No90411 を参照
      doc = DirectCast(o, mshtml.HTMLDocument)
      yahooButton = DirectCast(doc.all.item("yahoo"), mshtml.IHTMLElement)

      yahooButton_onclick = yahooButton.onclick '元の function オブジェクト
      yahooButton.onclick = Nothing '割り当てクリア

      Event1 = DirectCast(yahooButton, mshtml.HTMLInputTextElementEvents2_Event)
      AddHandler Event1.onclick, AddressOf WebDisp_click
     End Sub

     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      yahooButton.click()
     End Sub

     Private Function WebDisp_click(ByVal e As mshtml.IHTMLEventObj) As Boolean
      MsgBox("webDisp_onclick", MsgBoxStyle.SystemModal)

      Return CBool(CallByName(yahooButton_onclick, "[DispId=0]", CallType.Method, e)) '元の onclick 処理をここで呼び出す
     End Function
    End Class
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90456  Re[5]: AddHandler Eventの別スレッドについて
□投稿者/ 魔界の仮面弁士 -(2019/03/12(Tue) 15:03:23)
    2019/03/12(Tue) 15:51:52 編集(投稿者)

    No90455 (魔界の仮面弁士) に追記
    > それともイベントの発生順は JavaScript → VB の順番のままで構わないので、
    > VB 側のイベント処理を「別スレッドで処理させたい」という質問なのでしょうか。

    たとえば『AddHandler Event1.onclick, AddressOf WebDisp_click』の割り当てによって
    WebDisp_click が呼ばれた際に、メッセージボックスを非同期で表示したいのなら、先ほどの

     Private Function WebDisp_click(ByVal e As mshtml.IHTMLEventObj) As Boolean
       'これを閉じるまでフォームを操作できない
       MsgBox("webDisp_onclick", MsgBoxStyle.SystemModal)
       Return True
     End Function

    というコードの代わりに

     Private Function WebDisp_click(ByVal e As mshtml.IHTMLEventObj) As Boolean
       Task.Run(Sub()
              'これを開いたままでもフォームを操作できる
              MsgBox("webDisp_onclick", MsgBoxStyle.SystemModal)
            End Sub)
       Return True
     End Function

    などと書くことができます。
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90458  Re[6]: AddHandler Eventの別スレッドについて
□投稿者/ TanuTanu -(2019/03/12(Tue) 17:37:53)
    魔界の仮面弁士 様

    サンプル、説明、ソース等々何から何までご教授頂き誠にありがとうございます。
    半角カナの件は注意して書く様に致します。

    今回、頂いたソースですが、下記の行でエラーが発生しました。

    yahooButton.onclick = Nothing '割り当てクリア

    エラー:System.NotImplementedException: 'メソッドまたは操作は実装されていません。'

    ビルドは出来ましたが、HTML読み込み時にyahooButtonでエラー発生しました。

    対処方法をご教授頂きたく存じます。
    宜しくお願いいたします。

    ※Option Strict ON にするとエラー多発の為、OFFにしておりますが、これとは関係ないと思っていいでしょうか?
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90461  Re[7]: AddHandler Eventの別スレッドについて
□投稿者/ 魔界の仮面弁士 -(2019/03/12(Tue) 18:32:32)
    No90458 (TanuTanu さん) に返信
    > ※Option Strict ON にするとエラー多発の為、OFFにしておりますが、これとは関係ないと思っていいでしょうか?
    当方では、On/Off どちらでも動いていますね。何が違うのだろう?
    後ほど、別の PC でもテストしてみます。

    なおテスト前には、Internet Explorer 側で [F5] を押すなどして、ページを読み込みなおしておいてください。
    先のコードには、クリアした onclick イベントを復元する処理を仕込んでいないためです。
    (復元していないため、処理成功後に VB 側を終了させると yahoo ボタンの onclick が無反応になります)


    > 今回、頂いたソースですが、下記の行でエラーが発生しました。
    > yahooButton.onclick = Nothing '割り当てクリア

    その直前までは実行できているのですね。
    下記の処理で、メッセージボックスには何が表示されますか?

    yahooButton_onclick = yahooButton.onclick
    Dim b1 = IsDBNull(yahooButton_onclick)
    Dim b2 = IsNothing(yahooButton_onclick)
    If b1 OrElse b2 Then
      MsgBox($"DBNull={b1}, Nothing={b2}")
    Else
      MsgBox(CallByName(yahooButton_onclick, "toString", CallType.Method))
      yahooButton.onclick = DBNull.Value
    End If


    > エラー:System.NotImplementedException: 'メソッドまたは操作は実装されていません。'
    改変を防止するようなセキュリティソフト等でブロックされているとか…?
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90463  Re[8]: AddHandler Eventの別スレッドについて
□投稿者/ TanuTanu -(2019/03/12(Tue) 19:54:56)
    魔界の仮面弁士 様

    何度もお手数お掛けし申し訳ありません。
    ご教授頂いた件、下記の通りとなります。

    ■Option Strict ON にするとエラー多発の件

    以下のようなエラーが多数発生してしまいます。

    エラー BC30574 Option Strict On では、遅延バインディングを使用できません。
    CreateObject("Shell.Application").Windows

    エラー BC30512 Option Strict On では 'Object' から 'InternetExplorer' への暗黙的な変換は許可されていません。
    objIE.LocationName

    エラー BC30512 Option Strict On では 'Integer' から 'IntPtr' への暗黙的な変換は許可されていません。
    PWnd = FindWindowExA(0, 0,・・・

    ■下記の処理で、メッセージボックスには何が表示されますか?

    下記が表示されました。
    ※ボタン名称は非公開にしております。

    function onclick()
    {
    on Click ボタン名称()
    }

    ■改変を防止するようなセキュリティソフト等でブロックされているとか…?

    セキュリティソフトが入っております。

    ■試しに実施した事

    yahooButton.onclick = Nothing 削除してみました。
    MsgBox("webDisp_onclick", MsgBoxStyle.SystemModal)は表示されますが、ボタンクリックで表示されるWEBページダイアログが表示されません。

    イベントの復元を実装すれば希望する動作になりそうな感じがします。
    しかし私には復元方法が解りません。

    不躾で申し訳ありませんが何卒宜しくお願いいたします。


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

■90469  Re[9]: AddHandler Eventの別スレッドについて
□投稿者/ 魔界の仮面弁士 -(2019/03/13(Wed) 09:51:47)
    2019/03/13(Wed) 14:39:48 編集(投稿者)

    No90463 (TanuTanu さん) に返信
    > CreateObject("Shell.Application").Windows

    えぇ…。(−ー;
    別スレッドである No90411 を含め、今までこんなコードの話は
    出ていなかったように思うんですが、どこかで言及されていましたっけ?


    上記をレイトバインドで処理したいのであれば、
    過去ログの No47158 , No35068 あたりを探ってみてください。


    というか上記を使っているのなら、わざわざ API を駆使して
    >>> 下記サイトのGetIEDocumentでHTMLDocumentを取得しております。
    のような方法を取る必要は無いと思いますよ。

    Windows プロパティから得たコレクションを列挙することで、
    個々の InternetExplorer オブジェクトを取得できるので、
    その Document プロパティにアクセスすれば、
    HTMLDocument のインスタンスを得ることができますよね。


    > エラー BC30512 Option Strict On では 'Object' から 'InternetExplorer' への暗黙的な変換は許可されていません。
    > objIE.LocationName
    objIE 変数が As Object なのだとしたら、As SHDocVw.InternetExplorer にしてください。

    この場合、参照設定として、
     ・"Microsoft Internet Controls" (SHDocVw)
     ・"Microsoft Shell Controls And Automation" (Shell32)
    が必要です。


    参照設定を加えずに Option Strict On のままにしたいのであれば、
    先日の回答 ( No90410 , No90461 )や、上記過去ログ ( No35068 )などのように、
    CallByName を経由してアクセスする必要があります。


    > エラー BC30512 Option Strict On では 'Integer' から 'IntPtr' への暗黙的な変換は許可されていません。
    > PWnd = FindWindowExA(0, 0,・・・
    IntPtr 型の引数に 「0」という Integer 値を渡しているからでしょう。
    ここは IntPtr.Zero とすべきです。

    さらに言えば、FindWindowExA API ではなく FindWindowExW API を用いた方が望ましいと思います。


    > 下記が表示されました。
    > ※ボタン名称は非公開にしております。
    だとしたら、ターゲットにしているページが間違っています。

    取得した HTMLDocument が、先の No90454 で示した
    >> https://www.javadrive.jp/javascript/event/sample2_1.html
    になっていることを再度確認してみてください。

    このページから取得した yahoo ボタンであれば、下記の内容が表示されるはずなんですが…。

    ---------------------------
    function onclick(event)
    {
    kakunin(1)
    }
    ---------------------------


    上記の URL でも問題が生じるなら、環境依存の問題がありそうです。

    上記の URL では成功したけれども、目標としている URL だと失敗するのなら、
    jQueryのイベントハンドラが使われているなど、そのページ固有の
    別の問題がある可能性があるので、具体的な URL なり、
    正確なページの内容(HTML & JavaScript)が分からない事には、
    情報不足過ぎて答えようが無いです。
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

次の20件>

<< 0 | 1 | 2 >>

パスワード/

- Child Tree -