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

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

記事リスト ( )内の数字はレス数
NomalExcel Com オブジェクトの増殖(13) | NomalRichTextBoxのテキストをpictureBOXへ(12) | NomalPictureBoxの画像を連続保存(11) | NomalVB.NetでVB6.0と同じFontを指定しても同様に印刷されない(9) | Nomal作成した白黒画像をWordに貼り付けてから「図として保存」(8) | Nomal重なったPictureBox同士を透過する方法(7) | Nomalvb.netでExcelファイル操作(7) | NomalTreeViewの現在位置とDataGridViewの現在位置を合わせたい(7) | Nomalラジオボタンの一括設定(7) | NomalLabelで文字単位の背景色(7) | NomalTEXTBOXのプロパティを文字列に(7) | NomalDataAdapter.Updateで構文エラー(6) | Nomalキーボード+バーコードでキーボード入力を無効にしたい(6) | Nomaljumbo icon(256x256)が存在するか知る方法(6) | Nomal画像のスクロール(6) | Nomalタイマーの一括処理(6) | Nomal先頭に空白(スペース)があるファイルを読み込んでRichTextBoxへ書き出すとスペースが削除える(6) | NomalタッチキーボードでIMEを自動で切替えたい(6) | NomalPDFをフォーム上で表示させる方法につきまして(6) | Nomal特定のPCだけ発生する「パディングは無効なので削除できません」のエラーの原因(6) | Nomal全角シフト中にアクセスキーが効かない(5) | NomalVB.NETからcmdでpingを実行した時の結果(5) | NomalTabPageの背景色(5) | Nomalstyle.displayだと効率悪いから違うやり方をしたいです。(5) | Nomalグリッド表示レコードをJSONに変換(5) | NomalSeleniumで開いているページのTableを編集したい(5) | NomalMP4動画を再生する方法について(5) | NomalLableのカラー色を文字変数から変更したい(5) | NomalDatagridViewでファンクションキーを止めたい(5) | Nomalフォーム背景のみを半透明にしたい(5) | NomalDataGridViewの特定セルにボタンを配置する方法(5) | NomalWebView2によるスクレ―ピング(4) | NomalC#でJpeg圧縮のTiffファイルを作成したい(4) | NomalDataGridViewのVirtualModeを有効した場合の実装方法(4) | Nomalテーブルを順番通りに直すプログラムを外部で読み込めるようにしたいです。(4) | Nomalソケット通信入門 ひらがな(4) | Nomal時間変数(文字列)の扱い(4) | NomalTreeViewとDataGridViewのスクロールを同期(シンクロ)させたい(4) | Nomalフォームのリサイズ時にDataGridViewが再描画されない(4) | NomalPDFをフォーム上で表示させる方法につきまして(4) | NomalアプリでHDMIへ出す解像度を変えたい(4) | Nomal画像の中心を基点に回転(4) | NomalDataGridViewの行ヘッダーに行番号を表示した時のエラー(4) | NomalASP.NET WebApi内でXmlReader.Create(url)がタイムアウトする(4) | Nomal抽象クラスで実装したクラスの情報を知る(3) | Nomal兆億万表記の文字列を数値に変換できる?(3) | NomalGetDirectoriesでルートを指定するとエラーになる(3) | NomalLinqにおける明示的型指定の方法(3) | Nomalデータベースからのテーブル名一覧の効率的な取得方法(3) | NomalC# Chart X軸上のグラフ表示(3) | NomalVB.NETでBluetoothデバイスの電池残量を取得する方法(3) | NomalWindowsフォームデザイナについて(3) | NomalDrawstringでの透過文字作成(3) | Nomalワンタイムパスワードのサイトに自動ログインしてアクセストークンを得る(3) | NomalJSONの複雑な入れ子内部の値を取りたい。(3) | Nomalシステム時計の設定(3) | NomalVisual Basicでエラーが出る(3) | Nomal継承元フォームで各フォームのボタン動作を検知したい(3) | NomalRichTextBoxへのドラッグ&ドロップしたExcelファイルの扱い(3) | Nomal表示動作が重くなる(3) | NomalLoadOptionのパラメータの意味(3) | Nomal1行で書くことできますか?(3) | Nomalbitmapが保存できない(2) | Nomal特定ピクセルで画像を読み込みたい(2) | NomalDataGridViewでAlt+Enterで改行したい(2) | NomalProcessクラスからbatファイル実行後、KILLできない(2) | Nomal画面遷移(モーダルとモードレス)(2) | Nomal2つのradの数値から1つの角度を求めるコードを改善できますか?(C++)(2) | Nomalコンソールアプリで、WebView2の利用(2) | NomalEntity Frameworkは、使えるか?(2) | NomalC#のlong型でオーバーフローになる(2) | Nomal正規表現のパターン表記方法(2) | Nomalこういた物を作れますか?(2) | Nomalvb.netでのExcelファイルそうさ(2) | Nomalファイルとして配置したマニフェストを優先したい(2) | NomalVB2022でクリスタルレポートが開けない(2) | Nomalエクセルのみ監視ができない(2) | NomalExcelの数値 -> 日付みたいな関数?(2) | NomalSpinWait()を使う理由(2) | Nomalantecedentってなんですか?(2) | NomalRGB値の所得(2) | NomalVB.net からAccessDBへの接続(2) | NomalテキストボックスのValidatingイベントよりも先に発生するボタン発生イベントは何でしょう?(2) | NomalWindowsエクスプローラからのドラッグ&ドロップ(2) | Nomalクリックイベントでexeを作成できるか(2) | Nomalc#で日付型の定義の仕方で質問があります。(2) | Nomal列車の時間ごとの位置情報を表示したいです。(2) | NomalUrlにアクセスするとダウンロードされるファイルを捕まえる(2) | Nomalタブレット等でスワイプによるスクロールを実装(2) | Nomalbitmapを複数スレッドで処理したい(2) | Nomal読み出し元フォームの位置取得方法(2) | Nomalコンストラクターに続く{}の意味(2) | Nomalツールボックスにtableadapterが表示されない(1) | Nomalアセンブリ情報が載らない(1) | Nomal二次元マップから値の取得(1) | NomalDataGridViewのドロップダウンリストの表示と選択後の値を分けたい(1) | NomalVSTOによるエクセルアドインのインストーラーでのアップデート(1) | Nomalクリスタルレポート 明細部のサブレポート(0) | Nomalインストーラにて、ローミングフォルダにファイルを配置したい(0) | NomalChart X軸上の描画を切り替えたい(0) |



■記事リスト / ▼下のスレッド
■35395 / 親記事)  システム時計の設定
□投稿者/ ま〜 付き人(62回)-(2023/03/04(Sat) 17:06:42)
  • アイコン環境/言語:[VS2022 Win10] 
    分類:[.NET] 

    こんいちは
    またお世話になります

    https://dobon.net/vb/dotnet/system/setlocaltime.html#section5
    を参考に
    PCのシステム時計の時刻を変えようとしたのですが
    セキュリティエラーとなってしまいます

    他の方のコメントにされてますが私も同様の状況です
    何か道はありますでしょうか?

    宜しくお願いします

違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■35396 / ResNo.1)  Re[1]: システム時計の設定
□投稿者/ KOZ 一般人(19回)-(2023/03/06(Mon) 04:27:59)
  • アイコンNo35395に返信(ま〜さんの記事)
    > PCのシステム時計の時刻を変えようとしたのですが
    > セキュリティエラーとなってしまいます

    UAC が有効になっている場合にシステム時刻を変更するには、

    (1) 管理者権限でプロセスを立ち上げる
    (2) SeSystemtimePrivilege 特権を有効にする

    が必要です。

    https://dobon.net/vb/dotnet/system/asadmin.html
    https://dobon.net/vb/dotnet/system/setlocaltime.html#section4

    を参照してください。

違反を報告
引用返信
■35397 / ResNo.2)  Re[2]: システム時計の設定
□投稿者/ ま~ 一般人(1回)-(2023/03/07(Tue) 17:16:58)
  • アイコン情報ありがとうございます。

    早速試してみます。

違反を報告
引用返信
■35398 / ResNo.3)  Re[3]: システム時計の設定
□投稿者/ ま〜 付き人(63回)-(2023/03/14(Tue) 13:38:36)
  • アイコン御礼遅くなりすみません

    教えて頂いた内容で解決しました。

    ありがとうございます

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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35380 / 親記事)  Visual Basicでエラーが出る
□投稿者/ 野坂恭一 一般人(1回)-(2023/02/14(Tue) 07:49:45)
  • アイコン環境/言語:[Windows10 VB .NET Fremework 4.809037] 
    分類:[.NET] 

    Visual Basic community 2022 (Version 17.4.4)でプログラミングを学習しています。
    以下の、例題でテキストボックスを設置し、コンパイルすると,変数定義の所でエラーが出ます。

    環境 Windows10 .NET.Framework(4.809037)
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

    'Shift JISで書き込む
    '書き込むファイルが既に存在している場合は、上書きする
    Dim sw As New System.IO.StreamWriter("C:\test\1.txt", _
    False, _
    System.Text.Encoding.GetEncoding("shift_jis"))
    'TextBox1.Textの内容を書き込む
    sw.Write(TextBox1.Text)
    '閉じる
    sw.Close()

    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■35381 / ResNo.1)  Visual Basicでエラーが出る
□投稿者/ 野坂恭一 一般人(2回)-(2023/02/14(Tue) 07:56:37)
  • アイコンNo35380に返信(野坂恭一さんの記事)
    Visual Basic community 2022 (Version 17.4.4)でプログラミングを学習しています。
    以下の、例題でテキストボックスを設置し、コンパイルすると,変数定義の所でエラーが出ます。
     初心者なので、よくわかりません。よろしくお願いします。
    環境 Windows10 .NET.Framework(4.809037)
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

    'Shift JISで書き込む
    '書き込むファイルが既に存在している場合は、上書きする
    Dim sw As New System.IO.StreamWriter("C:\test\1.txt", _
    False, _
    System.Text.Encoding.GetEncoding("shift_jis"))
    'TextBox1.Textの内容を書き込む
    sw.Write(TextBox1.Text)
    '閉じる
    sw.Close()

    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
200×82
イメージ
--t.png
/11KB
違反を報告
引用返信
■35382 / ResNo.2)  Re[2]: Visual Basicでエラーが出る
□投稿者/ KOZ 一般人(18回)-(2023/02/14(Tue) 08:40:56)
  • アイコンNo35381に返信(野坂恭一さんの記事)
    > 以下の、例題でテキストボックスを設置し、コンパイルすると,変数定義の所でエラーが出ます。

    System.ArgumentException はコンパイル時のエラーではなく、実行時エラーです。
    おそらくプロジェクトが NET Core 以降なのではないかと思います。

    System.Text.Encoding.GetEncoding("shift_jis") が実行される前に

    System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)

    を実行してください。

    https://nishy-software.com/ja/dev-sw/dot-net-text-encodings/

違反を報告
引用返信
■35383 / ResNo.3)  Re[3]: Visual Basicでエラーが出る
□投稿者/ 野坂恭一 一般人(3回)-(2023/02/14(Tue) 09:42:21)
  • アイコンありがとうございました。
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35308 / 親記事)  継承元フォームで各フォームのボタン動作を検知したい
□投稿者/ saku 一般人(1回)-(2022/12/30(Fri) 08:33:39)
  • アイコン環境/言語:[C#] 
    分類:[.NET] 

    おはようございます。
    皆さまのお知恵を拝借できないでしょうか。

    基本となるフォーム(ファンクション、デザインの統一など)を作成して
    そのフォームを継承して各機能画面を作成しているのですが、

    継承元フォームの方で、キーボード入力を検知できるように(KeyPreview=True,KeyDownイベントなど)、
    マウスでボタンにフォーカスがあたる(またはクリック)した事を検知できるような方法って何か考えられないでしょうか?

    継承元フォームの方で処理を共通化することになり、各機能画面のボタンの検知が必要になったためです。

    何かしらヒントだけでも頂けると有難いです。

    よろしくお願いいたします。

違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■35309 / ResNo.1)  Re[1]: 継承元フォームで各フォームのボタン動作を検知したい
□投稿者/ 魔界の仮面弁士 大御所(1509回)-(2022/12/30(Fri) 10:19:06)
  • アイコンNo35308に返信(sakuさんの記事)
    > マウスでボタンにフォーカスがあたる(またはクリック)した事を検知
    マウス操作に限定した検知ということでしょうか。
    それともマウス以外の操作によるものも検出したいのでしょうか?

    たとえば Windows Touch 操作や、スタイラスによるタップも
    マウス操作によるクリックと同種に扱うという事で良いでしょうか。

    フォーカス移動にはマウス操作だけでなく、Tab / Shift+Tab 移動もあります。
    プログラムから Focus メソッドや SelectNextControl メソッド等によって
    フォーカスが移り変わることもあります。
    https://dobon.net/vb/dotnet/control/selectnextcontrol.html

    Click イベントの発火には、Alt + ニーモニックキー によるショートカット、
    フォーカス取得時の Space キーでの操作もあります。Form の
    AcceptButton / CancelButton によるショートカット操作もありますし、
    プログラムから PerformClick メソッドで呼ばれることもありますね。


    別にマウス操作に限る必要は無いのなら、継承フォーム側で OnControlAdded を
    オーバーライドして Button の追加を追跡しておき、そのボタンに対して
    GotFocus/Enter/MouseDown/Click イベントを追跡するのが良いと思います。

    その場合 Panel などの入れ子構造も再帰的にとらえる必要があるでしょう。
    状況によっては、ControlRemoved イベント/ OnControlRemoved メソッドでの
    解除処理も加えた方が良いかも知れません。


    ボタン操作と言えば、非アクティブなフォームのボタンがクリックされた場合
     ・フォームおよびそのボタンがアクティブになるだけ
     ・フォームとボタンがアクティブになり、Click イベントまで発動
    のどちらが好ましいか(Click Through の有無)という話があり、その切替を
    WndProc をオーバーライドすることで制御することがあります。
    https://learn.microsoft.com/en-us/archive/blogs/rickbrew/how-to-enable-click-through-for-net-2-0-toolstrip-and-menustrip

    「イベント」を処理する代わりに、こうした「Windows Message」を処理することで
    検出できるケースもあります。
違反を報告
引用返信
■35310 / ResNo.2)  Re[2]: 継承元フォームで各フォームのボタン動作を検知したい
□投稿者/ saku 一般人(2回)-(2022/12/30(Fri) 12:13:32)
  • アイコン詳しい説明、考慮すべき点に参考すべき情報、
    大変勉強になりました。
    今回はキー入力まわりの対応は完了しているので、マウスでのクリックに対する継承フォーム側での OnControlAdded、Windows Messageを念頭に調べてみます。

    もう感謝しかありません。
    ありがとうございました。
解決み!
違反を報告
引用返信
■35312 / ResNo.3)  Re[2]: 継承元フォームで各フォームのボタン動作を検知したい
□投稿者/ 魔界の仮面弁士 大御所(1511回)-(2022/12/30(Fri) 15:10:57)
  • アイコン
    解決済みチェックはそのままにしておきます。
    
    
    ■No35309に追記(魔界の仮面弁士の記事)
    > 別にマウス操作に限る必要は無いのなら、継承フォーム側で OnControlAdded を
    > オーバーライドして Button の追加を追跡しておき、そのボタンに対して
    > GotFocus/Enter/MouseDown/Click イベントを追跡するのが良いと思います。
    
    Button の Click イベントと Enter イベントを継承元フォームで捉えて
    独自の ControlClick / ControlEnter イベントとして発生させてみました。
    
    イベント引数 e.Control から、対象の Button オブジェクトを得られます。
    
    private void Form1_ControlClick(object sender, ControlEventArgs e)
    {
        listBox1.Items.Insert(0, $"{DateTime.Now:HH:mm:ss.ffff}/Click: {e.Control.Text}");
    }
    private void Form1_ControlEnter(object sender, ControlEventArgs e)
    {
        listBox1.Items.Insert(0, $"{DateTime.Now:HH:mm:ss.ffff}/Enter: {e.Control.Text}");
    }
    
    
    ベースクラスの実装はこんな感じ。
    
    
    // ---> SakuFormBase.cs --->
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Windows.Forms;
    using System.Collections;
    
    [DefaultEvent(nameof(SakuFormBase.ControlClick))]
    public class SakuFormBase : Form
    {
        // 実際には InitializeComponent(); の呼び出し等も記述
        public SakuFormBase() { }
    
        #region 公開イベント
        // ControlClick イベントという名に反して、Button にしか反応させていなかったりする
        [Category("Action"), Description("フォーム上の Button がクリックされた時に発生します。")]
        public event ControlEventHandler ControlClick;
        [Category("Focus"), Description("フォーム上の Button がアクティブになった時に発生します。")]
        public event ControlEventHandler ControlEnter;
        /// <summary><see cref="ControlClick"/> イベントを発生させます。</summary>
        protected virtual void OnControlClick(ControlEventArgs e) => ControlClick?.Invoke(this, e);
        /// <summary><see cref="ControlEnter"/> イベントを発生させます。</summary>
        protected virtual void OnControlEnter(ControlEventArgs e) => ControlEnter?.Invoke(this, e);
        #endregion
    
        #region 内部処理
        protected override void OnControlAdded(ControlEventArgs e)
        {
            base.OnControlAdded(e);
            // 子コントロールが追加されたら、Click/Enter イベントを捉える
            AttachEvents(e.Control);
        }
        private void AttachEvents(Control control)
        {
            if (control is Button button)
            {
                // Button が追加された時はイベントを追跡
                if (subscribes.Add(control))
                {
                    var a = new ControlEventArgs(control);
                    button.Click += (sender, e) => OnControlClick(a);
                    button.Enter += (sender, e) => OnControlEnter(a);
                }
            }
            else
            {
                // Button で無ければ、さらにその配下のコントロールに対して再帰的に追跡
                if (subscribes.Add(control))
                {
                    control.ControlAdded += (sender, e) => AttachEvents(control);
                }
                foreach (var c in control.GetControls<Control>())
                {
                    AttachEvents(c);
                }
            }
        }
        // イベントを追跡済みかどうかを管理
        private HashSet<Control> subscribes = new HashSet<Control>();
        #endregion
    }
    internal static class ControlExtensions
    {
        /// <summary>
        /// 指定した型の子孫コントロールを列挙する
        /// </summary>
        public static IEnumerable<T> GetControls<T>(this Control control) where T : Control
        {
            var controls = control.Controls.OfType<Control>();
            return controls.OfType<T>().Concat(controls.SelectMany(c => GetControls<T>(c)));
        }
    }
    // <--- SakuFormBase.cs ---
    
    
    ControlAdded イベント(OnControlAdded メソッド)を用いているのは、
    Button の追加が実行時に動的に行われた場合に備えるためのものです。
    (今回、ControlRemoved イベントの追跡は省略しています)
    
    デザイン時の画面構成のままで、ボタン数の増減が無いような場合は、
    Load 完了後に全 Button を列挙して捉えるだけでも十分かと思います。

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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35144 / 親記事)  RichTextBoxへのドラッグ&ドロップしたExcelファイルの扱い
□投稿者/ うっきー 一般人(1回)-(2022/08/30(Tue) 18:44:02)
  • アイコン環境/言語:[Windows10 C#.net] 
    分類:[.NET] 

    RichTextBoxにExcelファイルをそのまま貼り付けようとしています。

    AllowDrop=Trueにすると
    ドラッグ&ドロップで簡単に貼り付けることはできるのですが
    表示される名称が「Excelワークシート」のようになってしまいます

    このファイル名称を設定するにはどのようにすればよいでしょうか?
    よろしくお願いいたします。
182×117
イメージ
1661852642.png
/1KB
違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■35145 / ResNo.1)  Re[1]: RichTextBoxへのドラッグ&ドロップしたExcelファイルの扱い
□投稿者/ 魔界の仮面弁士 大御所(1449回)-(2022/08/30(Tue) 18:56:41)
  • アイコンNo35144に返信(うっきーさんの記事)
    > このファイル名称を設定するにはどのようにすればよいでしょうか?

    COM 版の RichTextBox を使ってみるとか。

    http://bbs.wankuma.com/index.cgi?mode=al2&namber=63101&KLOG=106
    http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=10815
違反を報告
引用返信
■35146 / ResNo.2)  Re[2]: RichTextBoxへのドラッグ&ドロップしたExcelファイルの扱い
□投稿者/ うっきー 一般人(2回)-(2022/08/31(Wed) 10:52:41)
  • アイコン魔界の仮面弁士さん、早速のアドバイスありがとうございます!

    参考にさせていただきます。

    おそらく、ファイルそのものを添付する形ではなく
    リンクを登録する形で対応することになりそうです。
    (そもそも名前を設定することは難しいということにすらたどりつけなかったので助かりました)

    ありがとうございました。
違反を報告
引用返信
■35147 / ResNo.3)  Re[3]: RichTextBoxへのドラッグ&ドロップしたExcelファイルの扱い
□投稿者/ うっきー 一般人(3回)-(2022/08/31(Wed) 10:55:03)
  • アイコンチェックし忘れました・・・
    解決済とさせていただきます。
解決み!
違反を報告
引用返信

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



■記事リスト / ▲上のスレッド
■35121 / 親記事)  表示動作が重くなる
□投稿者/ たこ 一般人(7回)-(2022/08/01(Mon) 01:48:55)
  • アイコン環境/言語:[VB.NET、.NET Framework 4.7.2、VS2019] 
    分類:[.NET] 

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

    ネットの通信状態を表示するフォームを作って表示させていますが、
    フォームの表示/非表示を繰り返すと動作が遅くなってしまいます。

    何が原因で問題が起こっているか解らず、お知恵をお貸しください。

    表示/非表示の部分
    -----------------------------------------------------------
      ''' <summary>
      ''' モニターForm
      ''' </summary>
      Private IOM As IOMonitor

      Private _IOMonitor = False

      ''' <summary>
      ''' IOモニター表示設定
      ''' </summary>
      ''' <returns>True:表示、False:非表示</returns>
      Public Overridable Property IOMonitor As Boolean
        Set(value As Boolean)
          _IOMonitor = value
          If _IOMonitor Then
            IOM = New IOMonitor(Me)
            IOM.Show()
          Else
            IOM.Close()
            IOM = Nothing
          End If
        End Set
        Get
          Return _IOMonitor
        End Get
      End Property
    -------------------------------------------

    メインクラスからモニターFormへはイベントで情報を渡しています。
    -------------------------------------------
    #Region "イベント定義"
      Public Delegate Sub DIODataEventHandler(ByVal sender As Object, ByVal e As NetDataEventArgs)
      ''' <summary>
      ''' ネット接続時のイベント
      ''' </summary>
      Public Event NetOpen As DIODataEventHandler
      ''' <summary>
      ''' ネット切断時のイベント
      ''' </summary>
      Public Event NetClose As DIODataEventHandler
      ''' <summary>
      ''' ネットエラー時のイベント
      ''' </summary>
      Public Event NetError As DIODataEventHandler
      ''' <summary>
      ''' データ送信時のイベント
      ''' </summary>
      Public Event SendData As DIODataEventHandler
    #End Region
    -------------------------------------------


    表示/非表示を繰り返す度に少しずつではありますが、メモリの使用容量が増ますので、
    ガーベージコレクションの問題かなと思い、
    GC.Collectとか入れてみましたが、上手く行きませんでした…

    よろしくお願いします。
違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■35122 / ResNo.1)  Re[1]: 表示動作が重くなる
□投稿者/ Azulean 大御所(532回)-(2022/08/01(Mon) 07:27:41)
  • アイコンNo35121に返信(たこさんの記事)
    > 何が原因で問題が起こっているか解らず、お知恵をお貸しください。
    現時点の情報ではわからないと思います。

    > メインクラスからモニターFormへはイベントで情報を渡しています。
    怪しむとしたらこのあたりでしょうか。

    たとえば、「メインクラスが公開するイベントに、モニターFormのイベントハンドラをAddHandlerしている」状態で、「RemoveHandlerを書いていない」、または「RemoveHandlerが実行されていない」なら、それが原因です。

    当てずっぽうで書くならこのくらいにとどまります。
    これではない場合は、フォームのコードやモニタクラスのコードなどの周辺コードも示しつつ、リークの量の数量イメージがわかる情報を共有してください。(〇〇KB など)
違反を報告
引用返信
■35123 / ResNo.2)  Re[2]: 表示動作が重くなる
□投稿者/ たこ 一般人(8回)-(2022/08/01(Mon) 12:21:35)
  • アイコンNo35122に返信(Azuleanさんの記事)
    > ■No35121に返信(たこさんの記事)

    >>メインクラスからモニターFormへはイベントで情報を渡しています。
    > 怪しむとしたらこのあたりでしょうか。
    >
    > たとえば、「メインクラスが公開するイベントに、モニターFormのイベントハンドラをAddHandlerしている」状態で、「RemoveHandlerを書いていない」、または「RemoveHandlerが実行されていない」なら、それが原因です。

    IOMonitorの初期化処理は次の様になっており、WithEventsでイベントを取得していますが、Addhandler/RemoveHandlerで書いた方が上手く行くのでしょうか?
    ちなみに今はこの様な形になっています。


    IOMonitor(Form)初期化処理
    -------------------------------------------
      Private WithEvents dc As DIO_LC
      Private Delegate Sub MonitorInvoke(sender As Object, e As NetDataEventArgs)


      Friend Sub New(dc As DIO_LC)

        ' この呼び出しはデザイナーで必要です。
        InitializeComponent()

        ' InitializeComponent() 呼び出しの後で初期化を追加します。
        Me.dc = dc
        DIOName.Text = Strings.Right("000" & Me.dc.Index, 3) & ":" & Me.dc.DIOName & vbCrLf & Me.dc.Place
        Me.Text = Me.dc.Index & ":" & Me.dc.DIOName
      End Sub
    -------------------------------------------

    イベント部処理  複数のスレッドから呼び出される為、Invokeしています。。。
    -------------------------------------------
      Private Sub dc_RecievedData(sender As Object, e As NetDataEventArgs) Handles dc.RecievedData
        If System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(e.Data).Substring(0, 1) = "R" Then
          If Me.InvokeRequired Then
            Me.Invoke(New MonitorInvoke(AddressOf DIO_Disp), sender, e)
            Return
          End If
          DIO_Disp(sender, e)
        End If
      End Sub
    -------------------------------------------

    ちょっと気づきました…

    Private Delegate Sub MonitorInvoke(sender As Object, e As NetDataEventArgs)

    この部分って表示/非表示される度に増えて行く気がします。

    検索したらDelegate.Removeと言うメソッドは見つけました…
    https://docs.microsoft.com/ja-jp/dotnet/api/system.delegate.remove?view=netframework-4.7.2

    …使用例が無く、使い方が全くわかりません^^;
    他にもRemoveAll、RemoveImplなどある様ですが、定義を読んでも解らず…


    どこか良い例が載っているサイトとかあれば教えてください。
違反を報告
引用返信
■35124 / ResNo.3)  Re[3]: 表示動作が重くなる
□投稿者/ たこ 一般人(10回)-(2022/08/01(Mon) 18:46:21)
  • アイコンNo35123に返信(たこさんの記事)
    > ■No35122に返信(Azuleanさんの記事)
    >>■No35121に返信(たこさんの記事)
    >

    > この部分って表示/非表示される度に増えて行く気がします。
    >
    > 検索したらDelegate.Removeと言うメソッドは見つけました…
    > https://docs.microsoft.com/ja-jp/dotnet/api/system.delegate.remove?view=netframework-4.7.2
    >
    > …使用例が無く、使い方が全くわかりません^^;
    > 他にもRemoveAll、RemoveImplなどある様ですが、定義を読んでも解らず…


    解決しました!
    Azulean様のヒントを元にいろいろ試行錯誤し、次の様にしました。
    どうやらdcが邪魔をして遅くなっていた様です。
    念のため、MonitorInvoke.Remove(Nothing, Nothing)も入れました。(使い方合ってるかどうかは自信が無いですが…^^;

    -------------------------------------------
      Private Sub IOMonitor_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
        dc.IOMonitorClose()  '表示/非表示のプロパティがdc側にある為、強制的にFalseにしている
        dc = Nothing
        MonitorInvoke.Remove(Nothing, Nothing)
      End Sub
    -------------------------------------------

    ありがとうございました。
解決み!
違反を報告
引用返信

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






Mode/  Pass/


- Child Tree -