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

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

記事リスト ( )内の数字はレス数
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追加コントロールのtabindex値を既存の間に設定する方法(1) | Nomal.Net 5.0 におけるDLL参照問題?(7) | NomalVB.net非同期処理でtextboxに出力したい(2) | NomalToolStripStatusLabelの空白部分を埋めたい(2) | NomalOracle への OleDb 接続に失敗する(3) | Nomal正規表現で株価を取得したい(1) | Nomal親スレッドへ処理の移譲(7) | Nomalデザイナで編集・チェックアウトキャンセルすると(3) | NomalVB.NETで作成したDLLをVB6.0から呼び出す(3) | NomalVB.NETからRDゲートウェイを利用したリモートデスクトップ接続(4) | NomalクラスによるGetBytes関数のエンディアンの違い(2) | Nomal.Net 5.0 におけるServiceControllerの代替クラス(3) | Nomal[VB.NET]Excelのプロセスが終了しない(2) | NomalC#をVBに変換した際の強制的な参照渡し(2) | Nomal新たにshowしたフォームでのボタンのクリック(5) | Nomalリッチテキストボックスの文字を太文字にしたい(2) | NomalVB.netにおける固定長出力方法(3) | NomalDataObjectの使いまわし(5) | NomalLIstview のDataSource(2) | NomalClassの作り方(2) | NomalOpenFileDialogの初期ファイル名の表示が変(1) | NomalVB.NETのVBA化(2) | Nomal改行のコード(7) | NomalGoogle翻訳の結果の取得(2) | NomalStopwatchクラスのElapsedMillisecondsの挙動(2) | Nomal.net Chartで二重ドーナツグラフの作り方(3) | Nomalexeをショートカットから起動した場合のエラー(2) | Nomalデスクトップ と Desktop(6) | Nomalデザイナのプロパティウィンドウで静的プロパティを選択したい(3) | NomalPHPでシリアライズした、データをデシリアライズしたい(4) | Nomal二次元配列 インデックスが配列の境界外(2) | NomalVB.netで作成したexeのNgenによる弊害(1) | NomalDrawBezierの使い方について(7) | Nomalメジャーバージョンの異なるLog4netライブラリを参照したい(4) | NomalVB6→2005変換時のDeclare宣言のマーシャリング属性(8) | NomalGROUPBOXの複製について(vb.net)(1) | NomalActiveReports 3.0からActiveReports 7.0へのァイルコンバータについて(4) | NomalAccess OLEでExecuteNonQuery(3) | NomalKeyDownでの右コントロールキーイベント(2) | NomalExcel複数シートの印刷順序(3) | NomalWMPへno(3) | NomalDataGridViewの行番号(7) | Nomalapp.config定義によるネットワークトレースログの世代管理(2) | Nomalrelease/debugのどちらで作成されたものかを判断する方法(2) | NomalC#コンソールアプリでタイピング練習ソフト作成(3) | Nomal自分自身を呼び出すのはOKですか(1) | NomalWebBrowser Control foreachで値が消える(2) | NomalDeclare宣言するdllと参照追加をするdllの区別(4) | NomalTaskクラスを.NET Framework 2.0で実現させる方法(2) | NomalVS2017で作成されたDLLをVS2005で作成されたAPで使用する方法(4) | NomalWebBrowser Controlを使って、任意の値を取得(5) | NomalEditボックスに簡体字をセットする方法(2) | NomalList型でエラーが起きてしまい・・・(1) | Nomalフォルダ内の全ての容量を取得したい(4) | NomalWebClientが上手く動かない(2) | Nomal共変性と反変性ってこういうこと?(4) | Nomalモードレスフォーム Warning IDE0067を回避したい(7) | NomalLINQの拡張メソッドの定義(1) | Nomalこんな演算子初めて見ました。(5) | Nomalプロセスからウインドウを取得(4) | Nomalフォーム外のカーソルの変更(2) | NomalLINQのメソッド構文の書き方(3) | NomalVB.NETでCSVを読み込む際にSQL文を使いたい(3) | NomalRichTextBoxで入力文字の自動折り返しを止めたい(2) | NomalRichTextBoxで入力文字の自動折り返しを止めたい(5) | Nomalラムダ式の勉強中(2) | NomalWebClientで、短期間にDownloadStringAsyncを実行したい(2) | Nomalvb.net+SQLiteで複数データベースファイルへのトランザクション方法(3) | NomalNewの使い方間違ってますか?(4) | Nomalジェネリック型インターフェースを使った変数を扱いたい(3) | NomalC#をVBに変換(2) | NomalProcess.WaitForExitで正常に動作しない?(3) | NomalCatch時のex.StackTraceの情報(3) | Nomalユーザーコントロール内のテキストボックスのmodifiedプロパティ(4) | NomalPictureBox.Locationのキャンセル(3) | NomalJOIN操作の構文エラー(4) | NomalVisualStudioでマクロ(3) | NomalVisualStudioでExcelのVSTO開発(3) | NomalOracleDataAccess を参照したプログラムでデバッグモードが機能しなくなる(3) | NomalIE11では表示されるが、.netのWebBrowserでは、表示されないHPを表示する方法(7) | NomalマウスのないOSでマウスカーソルの表示(2) | NomalRDP接続でのネットワーク帯域制限(0) | NomalFILE.COPYでIOExceptionエラーが出る(11) | NomalToolStripMenuItemにShortcutKeysを指定した際の、元のコントロールを取得する方法(2) | Nomal動的にプロパティや変数の値の取得(4) | NomalVB6 ほかのアプリケーションを起動し そのアプリケーションは終了させる方法(4) | NomalMouseEventArgsのカレント座標(2) | Nomalリッチテキストボックスでの字間の調整(2) | NomalDrawImage でメモリ不足エラー(3) | Nomal必須コンポーネントの一覧に追加したい(0) | NomalCode128でバーコードが読み取れない(8) |



■記事リスト / ▼下のスレッド
■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]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■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]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■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]



■記事リスト / ▲上のスレッド
■34594 / 親記事)  リッチテキストボックスの文字を太文字にしたい
□投稿者/ よっし〜 一般人(1回)-(2020/12/10(Thu) 16:27:12)
  • アイコン環境/言語:[VB.NET NET Framework4.0] 
    分類:[.NET] 

    いつもお世話になっております。
    現在リッチテキストボックスを使用してメモ帳的なものを作成しています。
    その中で「選択されている文字をフォント種類やサイズを変更せずに”太文字”に設定したい」のです。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, FontStyle.Bold)
    End Sub

    とすれば良いと思ったのですが、「ユーザが文字を選択していてもSelectionFontがIsNothingになる」事があります。よって・・・

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    If Not IsNothing(RichTextBox1.SelectionFont) Then
    RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, FontStyle.Bold)
    Else
    RichTextBox1.SelectionFont = New Font(????, FontStyle.Bold)
    End If
    End Sub

    と思ったのですが「?」の部分はどう記述すれば良いのでしょうか??
    以上、宜しくおおしえください。
違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34595 / ResNo.1)  Re[1]: リッチテキストボックスの文字を太文字にしたい
□投稿者/ Hongliang 大御所(591回)-(2020/12/10(Thu) 16:49:58)
  • アイコンhttps://dobon.net/vb/bbs/log3-47/28332.html
    これなどいかがでしょうか。
違反を報告
引用返信
■34598 / ResNo.2)  Re[2]: リッチテキストボックスの文字を太文字にしたい
□投稿者/ よっし〜 一般人(2回)-(2020/12/14(Mon) 09:05:45)
  • アイコンHongliang様、早速のご教示有り難うございます。

    > https://dobon.net/vb/bbs/log3-47/28332.html
    > これなどいかがでしょうか。
    ご案内して頂いた内容ですが、探した「つもり」でしたが過去掲示板に同様の質問があったんですね。(失礼しました)
    私にすればかなりハイレベルではありますが、内容を自分なりに解析してみたいと思います。
    どうも有り難うございました。


違反を報告
引用返信

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






Mode/  Pass/


- Child Tree -