DOBON.NETプログラミング道掲示板

■ 「新規作成」から投稿できます。
■ マルチポストされた投稿を見つけたときは、その投稿に返信することによりご報告ください。その際は匿名で投稿し、マルチポストされている場所を併記してください。
■ スパム対策のため、メールアドレスの先頭に"_"という文字が付加されています。
RSS 2.0 RSS 2.0 | RSS 0.91 | 携帯電話用 | 自分専用のアイコンを使用するには | 掲示板への要望 | 管理人に連絡 | お気楽掲示板
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
NomalWindowsMediaPlayerで次のURLを指定しても反映されない。(2) | Nomal"−"を縦書きにしたい(9) | Nomal.NET6.0 のWinFormにWPFのユーザーコントロールを配置したい(4) | NomalDataGridViewの列にコンボボックスを表示する(2) | Nomalデータグリッドビューの特定の列ヘッダの色(2) | NomalVB-Report10→11への移行(4) | Nomalデフォルトプリンタの用紙向き変更(0) | NomalASP.net デバッグ時の .js ファイルの変更が反映されない(1) | NomalpictureBoxとlabelの重ね合わせ(2) | NomalWindowsエクスプローラへのドロップ先フォルダの取得(4) | Nomal入力値を元に描画させたい(2) | NomalVBで開いたExcelでのイベントを取得するには(4) | NomalデザイナでSystemColorsのような色一覧から選択できるようにしたい(0) | NomalTaskの入れ子の待ち方2(4) | NomalTaskの入れ子の待ち方(5) | NomalVisualStudio2019 以降の検索ダイアログが正常に動作しない(2) | NomalUsingの使い方が間違っている?(4) | Nomal//./の意味は?(2) | Nomalバイナリーファイルの結合と分解(2) | NomalVSTOとWebView2の共存って可能?(2) | Nomal表の最後の行の下にDropできない(1) | NomalCookieの勉強を始めました。(2) | NomalDataGridViewの特定セルにボタンを配置する方法(3) | NomalDataGridViewのセル結合部分にボタンを表示する方法(3) | Nomal複数のPageに分かれる場合のスクレ―ピング(6) | NomalTask.Runの使い方(4) | NomalPictureBox のサイズを設定する(2) | NomalProcessクラスMainModuleプロパティでアクセス拒否(3) | NomalLINQでControlsをEnable=Falseに設定(3) | Nomalランダムファイルを高速化させたい(5) | Nomalプロセス間の通信(相互)(2) | NomalC#をVBに変換する方法が分かりません(1) | NomalPictureBoxに動的に画像を表示する(1) | NomalYahooのHPで、検索文字の入力ができない(3) | NomalWebView2のEncodeの問題?(5) | NomalWinFormでChromeをSeleriumで操作しているが、Closeの仕方(2) | Nomal印刷部数の固定(1) | NomalWinformでのDataGridView Comboboxのデータ追加削除が出来ない(3) | Nomalプログラムについて。(2) | Nomal拡張子関連付けのサンプルで削除時 例外発生(1) | Nomalユーザーコントロールをフォームで使用した時のエラー(6) | NomalマルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する(12) | Nomal画像の大きさを取得するには(4) | Nomalファイルがドライブ内で占有する容量(3) | NomalC#FormのXボタンイベントで、e.Cancel が使えない(2) | NomalAxWindowsMediaPlayerでプレイリストの途中から再生するには(2) | NomalWebView2でJavaScriptの実行の終了イベント(4) | NomalDataTableのDataRowVersion毎のInt型値の比較がうまくいかない(5) | NomalGPTかMBRを判断したい(2) | Nomalアセンブリ言語について。(1) | Nomalマクロについて。(3) | NomalDLL内のスレッドからイベントを発行すると、受信したフォームでラベルが更新できない(3) | Nomalアセンブリ言語について。(20) | Nomalシステムコールについて。(2) | Nomal Parallel.Forで思ったより早くならない(5) | NomalAngleSharp.Scripting.JavaScriptの使い方(2) | NomalDataAdapterで2回目のUpDateが出来ない(6) | NomalForm1イベントの選択が出来なくなりました。(9) | Nomalデザーナー時の継承先formのサイズ(0) | Nomalコンソールではなくテキストボックスに文字列を出力したい(7) | NomalAngleSharpのクエリー文2(4) | Nomalコーディングについて。(3) | Nomaldll修正時、それを参照しているexeのリビルド要否(2) | NomalAngleSharpのクエリー文(2) | Nomalデフォルトプロパティを使いたい(6) | Nomalテキストボックスでの制御(7) | NomalUSBカメラをピクチャボックスに表示(3) | Nomal二次元配列内の文字の置き換え(3) | Nomalcolor型を引数にする方法(2) | NomalVSプロジェクト作成方法の違いによる、プラグイン機能を持つアプリケーションへの影響について(6) | NomalInputボタンが押せない(4) | NomalWebBrowserのDocumentCompletedイベントの切り替え(3) | NomalEndConnectでのエラー(2) | Nomalボタンクリック時のLeaveイベントについて(1) | Nomalエクセルのデータを配列に読込んだ時の配列要素番号について(2) | Nomalorder by で抽出したデータをDataTableに入れてForEachでDataRow取得した際の順番(2) | Nomal非同期プログラミング時のConsole.WriteLineの動作(4) | NomalC#からストアドにDecimalを渡すと値が丸められる(4) | Nomalインスタンスの型を文字列で指定したい(2) | NomalSendKeys.Sendが効いていない(2) | Nomal他のプロジェクトのコントロールがツールボックスに表示されない(3) | Nomal複数のテキストボックス間のTextChangedイベントが相互干渉しないようにしたい(9) | Nomal呼び出し元によってWebApi側の処理速度に差が出る(1) | NomalPanelのDock=Topだとうまくいかない。代替案。(2) | Nomal.NetでのIPv6の比較(5) | Nomal.Net 5.0 におけるDLL参照問題?(7) | Nomal追加コントロールのtabindex値を既存の間に設定する方法(1) | NomalVB.net非同期処理でtextboxに出力したい(2) | NomalToolStripStatusLabelの空白部分を埋めたい(2) | NomalOracle への OleDb 接続に失敗する(3) | Nomal正規表現で株価を取得したい(1) | NomalVB.NETで作成したDLLをVB6.0から呼び出す(3) | Nomalデザイナで編集・チェックアウトキャンセルすると(3) | Nomal親スレッドへ処理の移譲(7) | NomalクラスによるGetBytes関数のエンディアンの違い(2) | Nomal[VB.NET]Excelのプロセスが終了しない(2) | NomalC#をVBに変換した際の強制的な参照渡し(2) | Nomal.Net 5.0 におけるServiceControllerの代替クラス(3) | Nomal新たにshowしたフォームでのボタンのクリック(5) | NomalVB.NETからRDゲートウェイを利用したリモートデスクトップ接続(4) |



■記事リスト / ▼下のスレッド
■34607 / 親記事)  [VB.NET]Excelのプロセスが終了しない
□投稿者/ FireFairy 一般人(1回)-(2021/01/06(Wed) 17:14:02)
  • アイコン環境/言語:[Win10 64bit VB.NET Ver3.5] 
    分類:[.NET] 

    いつも参考にさせて頂いており、初めて投稿いたします。
    何卒よろしくお願いいたします。
    
    タイトルの件についてですが、
    取得したデータをExcelに出力し、列を自動調整する処理を書いています。
    複数のシートが作成されますのでシート毎に列を自動調整するよう処理を記載しています。
    以下コードで右向き矢印の処理が原因でExcelのプロセスが残ってしまいます。
    
    先輩方にお力をお借りしたく初投稿させて頂きました。
    恐縮ですが何卒よろしくお願いいたします。
    
    
    以下にコードを抜粋いたします。
    '--------------------------------------
    '----------Excel 列の自動調整----------
    Dim xlApp As New Excel.Application
    Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
    Dim xlBook As Excel.Workbook = xlBooks.Open(IO.Path.Combine(FolderBrowserDialog.SelectedPath, StrExcelFileName))
    Dim xlSheets As Excel.Sheets = xlBook.Worksheets
    Dim xlSheet As Excel.Worksheet
    Dim xlCells As Excel.Range
    Dim xlRange As Excel.Range
    
    For i = 1 To xlSheets.Count
    
        xlSheet = xlSheets(i)
        xlCells = xlSheet.Cells(1, i)
    →  xlRange = xlSheet.Range("A1", xlCells)
        xlRange.EntireColumn.AutoFit()
    
        'MRComObject(xlRange)
        MRComObject(xlCells)
        MRComObject(xlSheet)
    Next
    MRComObject(xlSheets)
    xlBook.Save()
    xlBook.Close()
    MRComObject(xlBook)
    MRComObject(xlBooks)
    xlApp.Quit()
    MRComObject(xlApp)
    '----------Excel 列の自動調整----------
    '--------------------------------------
    
    
    Private Sub MRComObject(ByRef objCom As Object)
        Try
    
            If Not objCom Is Nothing AndAlso System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then
                Dim i As Integer
                Do
                    i = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
                Loop Until i <= 0
            End If
    
        Catch ex As Exception
    
    
        Finally
    
            objCom = Nothing
        End Try
    End Sub

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34608 / ResNo.1)  Re[1]: [VB.NET]Excelのプロセスが終了しない
□投稿者/ 魔界の仮面弁士 大御所(1310回)-(2021/01/06(Wed) 18:54:31)
  • アイコン
    2021/01/06(Wed) 18:57:40 編集(投稿者)
    
    ■No34607に返信(FireFairyさんの記事)
    > 複数のシートが作成されますのでシート毎に列を自動調整するよう処理を記載しています。
    > 以下コードで右向き矢印の処理が原因でExcelのプロセスが残ってしまいます。
    
    既に読まれているかもしれませんが、下記の記事を紹介しておきます。
    http://hanatyan.sakura.ne.jp/vb2005/vb2013excel01.htm
    
    
    > Sub MRComObject(ByRef objCom As Object)
    この実装だと、Option Strict On モードで使えないのが難点ですね。
    
    上記記事にあるように、
     Sub MRComObject(Of T As Class)(ByRef objCom As T)
    などとしておくと、Option Strict On にも対応できるようになります。
    
    
    
    とりあえず修正案。
    
    
    For i = 1 To xlSheets.Count
        Dim xlSheet As Excel.Worksheet = xlSheets(i)
        Dim xlCells1 As Excel.Range = xlSheet.Cells
        Dim xlCells2 As Excel.Range = xlCells1(1, i)
        Dim xlCells3 As Excel.Range = xlSheet.Range("A1", xlCells2)
        Dim xlCells4 As Excel.Range = xlCells3.EntireColumn
        xlCells4.AutoFit()
        MRComObject(xlCells4)
        MRComObject(xlCells3)
        MRComObject(xlCells2)
        MRComObject(xlCells1)
        MRComObject(xlSheet)
    Next
    
    
    
    以下説明。
    
    
    
    >     xlCells = xlSheet.Cells(1, i)
    ここがまず最初の修正箇所。
    
    上記ではこれを
        xlCells1 = xlSheet.Cells
        xlCells2 = xlCells1(1, i)
    という二段階の処理に分けています。Workbooks や Worksheets と同じですね。
    
    Cells プロパティの定義は、引数 2 つを伴った
     Public Property Cells(rowIndex As Integer, colIndex As Integer) As Excel.Range
    ではなく、引数を持たない
     Public Property Cells() As Excel.Range
    な定義であることに注意してください。
    
    
    > →  xlRange = xlSheet.Range("A1", xlCells)
    
    書き方としては問題無いのですが、上記のように、
    「COM オブジェクトを引数に渡すメソッドやプロパティ」を呼び出す処理では、
    引数に渡された COM オブジェクト(つまり xlCells2) の参照カウントが
    意図せず増加してしまうケースが稀にあります。
    (特に、Object 型を通じてレイトバインドしている場合に発生しやすいです)
    
    意図せず増加してしまった参照カウントは、Marshal.ReleaseComObject を
    一回呼び出すだけでは十分に解放しきれません。このようなケースでは、
    Marshal.FinalReleaseComObject メソッドを使って強制解放することができます。
    
    ちなみに FinalReleaseComObject を持たない .NET Framework 1.x 世代の場合には、
    今回提示頂いたソースのように、ReleaseComObject の戻り値が 0 になるまで
    解放処理を繰り返すことで代用できます。
    
    
    >    xlRange.EntireColumn.AutoFit()
    これは「.」が二回連なっているため、EntireColumn の解放が遅れる可能性があります。
    これも変数に受けて、キチンと解放するようにしましょう。

違反を報告
引用返信
■34609 / ResNo.2)  Re[2]: [VB.NET]Excelのプロセスが終了しない
□投稿者/ FireFairy 一般人(2回)-(2021/01/07(Thu) 08:24:17)
  • アイコン
    魔界の仮面弁士様
    ご教示ありがとうございました。
    
    修正案の通りにコードを反映したらプロセスが残らないようになりましたので解決いたしました。
    そして教えいただいたサイトも参考にさせていただきます
    
    またお世話になることがあるかもしれませんが、その時は何卒よろしくお願いいたします。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34604 / 親記事)  C#をVBに変換した際の強制的な参照渡し
□投稿者/ tomichan 一般人(1回)-(2021/01/01(Fri) 16:36:16)
  • アイコン環境/言語:[Win10,VB.NET,.NET4.0] 
    分類:[.NET] 

    お世話になります

    ポータブルデバイス(WPD)を利用して、デバイスの一覧と MTPファイルの読込と書込みをしたくて、
    いろいろ探し回った結果、こちらのC#コードを参考にVBに書き起こしています。
    (https://www.ipentec.com/document/csharp-wpd-programming-overview)

    そこでC#のコードは
    private void Form1_Load(object sender, EventArgs e)
    {
    deviceManager = new PortableDeviceManager();
    deviceManager.RefreshDeviceList();
    uint count = 0;
    deviceManager.GetDevices(null, ref count); ← この部分
    textBox1.Text += "WPDデバイスの数:" + count.ToString() + "\r\n";
    ...............
    となっているものをVBの変換コードとして
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    deviceManager = New PortableDeviceManager
    deviceManager.RefreshDeviceList()
    Dim count As UInteger = 0
    deviceManager.GetPrivateDevices(Nothing, count)
    TextBox1.Text += "WPDデバイスの数:" + count.ToString() + vbCrLf
    .............
    と記述しました。

    C#でデバックしたところ、問題なくcountが取得できるのですが、VBでは取得することができません。
    C#で作ればよいのですが、既存のVBで起こしたプログラムを改良したく、かつVBが好きなので、
    何とかしようといろいろ探し回って、原因は引数の参照渡しに関して、C#のref、outのように
    「VB側で引数を明示的に参照渡しにすることで解決できるのでは」
    と思い苦悶していましたが自己解決できずに投稿させていただきました。

    当方の環境は 
    OSはWin10 Home64bit、VS2019(Version 16.8.3)、フレームワークは.net4.0、OptionStrictはOffの状態です。

    最終的にやりたいことは、スマホやデジカメ等のPCに接続したポータブルデバイスからのファイルのやり取りです。
    他の方法を含め、皆様のお力をお借りしたく、ご指導いただけますよう、よろしくお願いします。


違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34605 / ResNo.1)  Re[1]: C#をVBに変換した際の強制的な参照渡し
□投稿者/ Hongliang 大御所(593回)-(2021/01/01(Fri) 17:41:26)
  • アイコン> 何とかしようといろいろ探し回って、原因は引数の参照渡しに関して、C#のref、outのように
    > 「VB側で引数を明示的に参照渡しにすることで解決できるのでは」
    > と思い苦悶していましたが自己解決できずに投稿させていただきました。

    そんな方法はない(はず)ですし、そうする意味もなく参照渡しされます。
    C#で呼び出しにrefが必要ということは、そのメソッド引数のシグネチャはVBからはByRefに見えるので。

    > deviceManager.GetDevices(null, ref count); ← この部分
    > deviceManager.GetPrivateDevices(Nothing, count)

    呼び出してるメソッドが違うように見えますが?
違反を報告
引用返信
■34606 / ResNo.2)  Re[2]: C#をVBに変換した際の強制的な参照渡し
□投稿者/ tomichan 一般人(2回)-(2021/01/01(Fri) 18:24:19)
  • アイコンNo34605に返信(Hongliangさんの記事)
    >>何とかしようといろいろ探し回って、原因は引数の参照渡しに関して、C#のref、outのように
    >>「VB側で引数を明示的に参照渡しにすることで解決できるのでは」
    >>と思い苦悶していましたが自己解決できずに投稿させていただきました。
    >
    > そんな方法はない(はず)ですし、そうする意味もなく参照渡しされます。
    > C#で呼び出しにrefが必要ということは、そのメソッド引数のシグネチャはVBからはByRefに見えるので。
    >
    >> deviceManager.GetDevices(null, ref count); ← この部分
    >> deviceManager.GetPrivateDevices(Nothing, count)
    >
    > 呼び出してるメソッドが違うように見えますが?

    Hongliangさん ありがとうございました。
    私の根本的な間違えでした。
    C#の翻訳だけに気を取られていて、一番大事な確認作業を怠り、
    一人で翻訳完了したと思い込んで苦悶を続けていました。
    ご指摘通り、メゾットの問題でした。
    今回はご指摘ありがとうございます。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34601 / 親記事)  .Net 5.0 におけるServiceControllerの代替クラス
□投稿者/ あばば無人君 一般人(11回)-(2020/12/25(Fri) 16:44:44)
  • アイコン環境/言語:[Windows10(1909) 64bit、.Net 5.0、C#] 
    分類:[.NET] 

    いつも当サイトで勉強させて頂いております。

    さてタイトルの件ですが、現在.NetFrameworkで作成されたライブラリを
    .Net 5.0で作り直す作業をしております。

    現行のライブラリの中でServiceControllerクラスを使用して特定の
    サービスが起動しているかチェックしている処理があるのですが、
    .Net5.0だとServiceControllerクラスが使えません。
    (そもそもSystem.ServiceProcess.dllが無い)

    .Net 5.0はクロスプラットフォームなので仕方ないかと思いますが、
    代替のクラス(や方法)等ご存知の方はいらっしゃいませんでしょうか?

    宜しくお願いいたします。

違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■34602 / ResNo.1)  Re[1]: .Net 5.0 におけるServiceControllerの代替クラス
□投稿者/ Hongliang 大御所(592回)-(2020/12/25(Fri) 17:24:07)
  • アイコンhttps://docs.microsoft.com/ja-jp/dotnet/api/system.serviceprocess.servicecontroller?view=dotnet-plat-ext-5.0
    .NET Core 1.0の時点で入っているようですが…。
    アセンブリ名は少し変わったみたいですね。
違反を報告
引用返信
■34603 / ResNo.2)  Re[2]: .Net 5.0 におけるServiceControllerの代替クラス
□投稿者/ あばば無人君 一般人(13回)-(2020/12/25(Fri) 21:01:14)
  • アイコンHongliangさん、お返事ありがとうございます。

    > .NET Core 1.0の時点で入っているようですが…。
    > アセンブリ名は少し変わったみたいですね。

    「.Net Platform Extensions」なる物があるのですね〜。
    恥ずかしながら初めて知りました。

    さっそく作り直し中のライブラリのプロジェクトに
    NuGet(CUI版)から導入してみましたところ、
    ServiceControllerクラスが使用できました。
    本当にありがとうございます。

    ただ、ビルドしてbinフォルダを確認したところ
    ServiceControllerクラスが含まれてるDLLの他に
    大量のDLLや、runtimesというフォルダが作られ
    その中に様々なOS名のフォルダが作られました。

    これらもライブラリの一式として加えるのは
    かなり抵抗がありますね。困ったものです(^_^;)

    何はともあれタイトルの疑問は解決できました。
    教えて頂き本当にありがとうございました。

違反を報告
引用返信
■34610 / ResNo.3)  Re[3]: .Net 5.0 におけるServiceControllerの代替クラス
□投稿者/ あばば無人君 一般人(14回)-(2021/01/07(Thu) 11:48:30)
  • アイコンすみません、解決済みにしていませんでした。
    本件、これで解決とさせて頂きます。

    Hongliangさん、ありがとうございました。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-3]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34592 / 親記事)  新たにshowしたフォームでのボタンのクリック
□投稿者/ 未熟者ケンイチ 一般人(1回)-(2020/12/09(Wed) 14:29:09)
  • アイコン環境/言語:[c#] 
    分類:[.NET] 

    いつも参考にさせて頂いております。初めて投稿いたします。よろしくお願いいたします。

    c#にて

    Form_02 open_form = new Form_02 ();
    // フォーム表示
    open_form.Show (this);
    // 通信処理など、長時間かかる処理
    open_form.form_02_proc ();

    としました。するとForm_02が表示され、表示と同時にメソッドform_02_procが呼び出されます。ここまでは意図した通りです。

    Form_02にはボタンがいくつかありどのボタンも現象は同じで、最初のクリックでは反応せず、2回目のクリックでやっと処理が行われます。

    現在form_02_procはテスト用のコードが書かれており、
    internal void form_02_proc ()
    {
    Int32 loop = 0;
    // お仕事シミュレーション
    while ((15000 > loop) &&
    (false == exit_flag))
    {
    Application.DoEvents ();
    loop++;
    textBox_test.Text = loop.ToString ();
    }
    // 「戻る」クリックと同じとする
    p_result = RESULTS.ABORT;
    exit_flag = true;
    }
    となっております。

    上記「2度クリックしないとボタンの処理が起動しない」点について悩んでおり、諸先輩方のお力をお借りしたく投稿させていただきました。よろしくお願いいたします。
違反を報告
引用返信

▽[全レス5件(ResNo.1-5 表示)]
■34593 / ResNo.1)  Re[1]: 新たにshowしたフォームでのボタンのクリック
□投稿者/ 魔界の仮面弁士 大御所(1308回)-(2020/12/10(Thu) 13:06:48)
  • アイコンNo34592に返信(未熟者ケンイチさんの記事)
    > c#にて
    c# ではなく、
    C# ですね。

    > // 通信処理など、長時間かかる処理
    > open_form.form_02_proc ();
    長時間かかる処理を UI スレッドで実施してはいけません。

    ループ待機 + DoEvents での待ち合わせなどを行うのではなく、
    C# 5.0 以上であれば async 、それ未満なら BackgroundWorker を使うなどして
    時間のかかる処理を別スレッドに分離することを検討してみてください。
違反を報告
引用返信
■34596 / ResNo.2)  Re[2]: 新たにshowしたフォームでのボタンのクリック
□投稿者/ 未熟者ケンイチ 一般人(2回)-(2020/12/10(Thu) 17:01:16)
  • アイコン返信いただき、ありがとうございます。

    > ループ待機 + DoEvents での待ち合わせなどを行うのではなく、
    > C# 5.0 以上であれば async 、それ未満なら BackgroundWorker を使うなどして
    > 時間のかかる処理を別スレッドに分離することを検討してみてください。

    ご指摘いただいた通り、本番のコードはそのようにする予定です。
    ただ、このような方法でテスト用のコードを書き、表示と操作を行っているフォームがいくつもあるのですが、こちらで質問させていただいたもの「だけ」がこのようになるので、どこかのプロパティか、呼び出し方法の問題か、別件で色々いじったので「何かあるのかな?」と考えた次第です。

    ボタンやテキストボックス等のない、フォームをクリックした後でもボタンが効きますので、どうも「1回目のクリックでフォームがアクティブ?になり、2回目のクリックでボタンクリックが認識されている」感じです。

    誠に申し訳ありません。お手すきの方、もう少しお相手して頂けると幸いです。
違反を報告
引用返信
■34597 / ResNo.3)  Re[3]: 新たにshowしたフォームでのボタンのクリック
□投稿者/ 魔界の仮面弁士 大御所(1309回)-(2020/12/11(Fri) 10:17:43)
  • アイコンNo34596に返信(未熟者ケンイチさんの記事)
    > どうも「1回目のクリックでフォームがアクティブ?になり、
    > 2回目のクリックでボタンクリックが認識されている」感じです。

    そのあたりの動作は、コントロールによっても異なっており、
    たとえば Button と ToolStripButton でも異なる動作となります。
    具体的には、非アクティブフォームの ToolStripButton をクリックした場合、
    初回はボタンが動作せず、単にフォームがアクティブ化するだけで、
    2 回目のクリックで、ようやくボタンが押されることになります。

    もしも一回のクリックでアクティブ化とボタン動作を同時にこなしたい場合、
    該当コントロールの WndProc をオーバーライドして、
    WM_MOUSEACTIVATE 時の戻り値を、MA_ACTIVATEANDEAT から
    MA_ACTIVATE に差し替える必要が生じます。
    https://docs.microsoft.com/ja-jp/windows/win32/inputdev/wm-mouseactivate
    https://docs.microsoft.com/en-us/archive/blogs/rickbrew/how-to-enable-click-through-for-net-2-0-toolstrip-and-menustrip


    あるいは、コントロールの種類が他のフォームの場合と同様であるのに
    該当フォームだけ動作が異なるというのであれば、継承フォームや
    NativeWindow クラスで処理されている可能性、あるいは別の UI スレッドで
    動作していたために、フォーカス遷移が阻害されている箇所があったなどの
    理由かもしれません。ソースを追わないと何とも言えないですが。
違反を報告
引用返信
■34599 / ResNo.4)  Re[4]: 新たにshowしたフォームでのボタンのクリック
□投稿者/ 未熟者ケンイチ 一般人(3回)-(2020/12/14(Mon) 17:44:20)
  • アイコンNo34597に返信(魔界の仮面弁士さんの記事)
    > ■No34596に返信(未熟者ケンイチさんの記事)
    >>どうも「1回目のクリックでフォームがアクティブ?になり、
    >>2回目のクリックでボタンクリックが認識されている」感じです。
    >
    > あるいは、コントロールの種類が他のフォームの場合と同様であるのに
    > 該当フォームだけ動作が異なるというのであれば、継承フォームや
    > NativeWindow クラスで処理されている可能性、あるいは別の UI スレッドで
    > 動作していたために、フォーカス遷移が阻害されている箇所があったなどの
    > 理由かもしれません。ソースを追わないと何とも言えないですが。

    お忙しい中でのお返事、どうもありがとうございます。
    せっかくお返事を頂いたのに、反応が遅くなってしまいました。申し訳ありません。
    URLもご教示いただきましたが英語が苦手なため、Googleさんに聞きながら悪戦苦闘しております。

    一応、ソースを貼ります。コメントは削除しましたが、その他はソースコードのままです。

    ・呼び出し側
    Form_02 open_form = new Form_02 ();
    open_form.Show (this);
    open_form.form_02_proc ();
    // 処理終了で結果を取得
    a_result = open_form.A_RESULT;


    ・呼ばれる側
    public Form_02 ()
    {
    InitializeComponent ();
    }
    private void Form_02_Load (object sender, EventArgs e)
    {
    // 表示位置調整
    this.Location = new Point (0, 0);
    // サイズ変更の禁止
    this.MaximumSize = this.Size;
    this.MinimumSize = this.Size;
    // タイムアウトタイマを起動
    timeout_timer = 1000;
    timer_a.Enabled = true;
    }
    private void button_1_Click (object sender, EventArgs e)
    {
    a_type = A_TYPE.MEMBER;
    a_machine = A_MACHINE.MACHINE01;
    p_result = A_RESULTS.SUCCESS;
    exit_flag = true;
    }
    internal void form_02_proc ()
    {
    Int32 loop = 0;
    // お仕事シミュレーション
    while (false == exit_flag)
    {
    Application.DoEvents ();
    loop++;
    textBox_test.Text = loop.ToString ();
    }
    }


違反を報告
引用返信
■34600 / ResNo.5)  Re[4]: 新たにshowしたフォームでのボタンのクリック…自己解決
□投稿者/ 未熟者ケンイチ 一般人(5回)-(2020/12/14(Mon) 18:47:07)
  • アイコン自己解決いたしました。魔界の仮面弁士様、お忙しい中のご教示、どうもありがとうございました。

    ソースコードは以下のように
    Form_02 open_form = new Form_02 ();
    this.Visible = false;
    open_form.Show (this);
    open_form.form_02_proc ();
    と、それまで表示していたフォームを非表示にするコードを挿入するだけでした。
    確かに他のフォームは、
    open_form.Close ();
    してからさらに別フォームを表示していたので、おそらくこの1行が効いているのだと思います。また上記「this」で指されるフォームは、アプリケーションを起動した時に表示されるフォームだったので、盲点になっておりました。

    魔界の仮面弁士様はじめお読みいただいた皆様、どうもありがとうございました。
    またお世話になることがあるかもしれませんが、その時はどうぞよろしくお願いいたします。
    とりあえずは、これで解決といたします。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-5]



■記事リスト / ▲上のスレッド
■34577 / 親記事)  VB.NETからRDゲートウェイを利用したリモートデスクトップ接続
□投稿者/ LOVESONY 一般人(1回)-(2020/11/20(Fri) 20:45:01)
  • アイコン環境/言語:[VB.NET] 
    分類:[.NET] 

    皆さんはじめまして。
    VB.NETからRDゲートウェイを利用したリモートデスクトップ接続を行いたいです。
    RDゲートウェイを利用する場合のリモートデスクトップの起動方法をご教示頂けますでしょうか。
違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■34578 / ResNo.1)  Re[1]: VB.NETからRDゲートウェイを利用したリモートデスクトップ接続
□投稿者/ Azulean 大御所(519回)-(2020/11/20(Fri) 21:40:12)
  • アイコンNo34577に返信(LOVESONYさんの記事)
    > VB.NETからRDゲートウェイを利用したリモートデスクトップ接続を行いたいです。
    > RDゲートウェイを利用する場合のリモートデスクトップの起動方法をご教示頂けますでしょうか。

    リモートデスクトップクライアントを起動するということは、mstsc.exe の起動だと思います。
    「mstsc.exe /?」として起動するとコマンドライン引数の説明が表示されますので、まずはそれを確認してみてはどうでしょうか?

    その上でわからない点を具体的に質問されると良いと思います。
違反を報告
引用返信
■34579 / ResNo.2)  Re[2]: VB.NETからRDゲートウェイを利用したリモートデスクトップ接続
□投稿者/ LOVESONY 一般人(2回)-(2020/11/20(Fri) 22:03:36)
  • アイコンNo34578に返信(Azuleanさんの記事)
    > ■No34577に返信(LOVESONYさんの記事)
    >>VB.NETからRDゲートウェイを利用したリモートデスクトップ接続を行いたいです。
    >>RDゲートウェイを利用する場合のリモートデスクトップの起動方法をご教示頂けますでしょうか。
    >
    > リモートデスクトップクライアントを起動するということは、mstsc.exe の起動だと思います。
    > 「mstsc.exe /?」として起動するとコマンドライン引数の説明が表示されますので、まずはそれを確認してみてはどうでしょうか?
    >
    > その上でわからない点を具体的に質問されると良いと思います。

    ありがとうございます。
    早速調べてみました。
    mstsc.exeを使ってRDPを実行できそうなのですが、ユーザ名やパスワードは指定できないのでしょうか?
違反を報告
引用返信
■34580 / ResNo.3)  Re[3]: VB.NETからRDゲートウェイを利用したリモートデスクトップ接続
□投稿者/ Azulean 大御所(520回)-(2020/11/21(Sat) 10:55:48)
  • アイコンNo34579に返信(LOVESONYさんの記事)
    > mstsc.exeを使ってRDPを実行できそうなのですが、ユーザ名やパスワードは指定できないのでしょうか?

    「接続用の.rdpファイル」という言葉を確認されたかと思います。
    「rdp」と「パスワード」を組み合わせて検索してみると良いでしょう。

    (ヘルプに示唆されているようにコマンドライン引数での直接の指定はできません)
違反を報告
引用返信
■34615 / ResNo.4)  Re[4]: VB.NETからRDゲートウェイを利用したリモートデスクトップ接続
□投稿者/ LOVESONY 一般人(3回)-(2021/01/08(Fri) 15:34:51)
  • アイコンNo34580に返信(Azuleanさんの記事)
    > ■No34579に返信(LOVESONYさんの記事)
    > 「接続用の.rdpファイル」という言葉を確認されたかと思います。
    > 「rdp」と「パスワード」を組み合わせて検索してみると良いでしょう。
    >
    > (ヘルプに示唆されているようにコマンドライン引数での直接の指定はできません)


    返信が遅れましてすいません。
    あれから試行錯誤して少しづつ進んでおります。
    ありがとうございました!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-4]






Mode/  Pass/


- Child Tree -