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

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

記事リスト ( )内の数字はレス数
Newtarget="_blank"で開いたページの閉じる処理(window.close())が動かない(0) | 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) | NomalあるWindows10PCでビルドしたEXEがW8.1以下で実行エラー(5) | NomalApp.configのMy.Application.Log設定で使用できない属性が出る(0) | NomalVC++ → VB.Netに変換時に文法エラー(2) | Nomalvb2010を使用したmicrosoft Wordの任意の行の削除(0) | NomalVb.netからAccessへの接続について(3) | NomalSQL-Server Compact 4.0が表示されない(2) | Nomalバーコードの数字を非表示にしたい(2) | Nomal令和の日付への対応(3) | Nomalスクロールバーが出た時に高さを変えたい(4) | Nomal自作したアプリの発行元を明記したい(2) | NomalHTTP 417エラーを発生させるためのIIS設定はどうすればよいか(3) | Nomal起動ディスプレイの指定方法について(6) | NomalSystem.Threading.Thread.Sleep()と変数(2) |



■記事リスト / ▼下のスレッド
■34283 / 親記事)  動的にプロパティや変数の値の取得
□投稿者/ ゆみと 一般人(1回)-(2019/07/28(Sun) 12:46:50)
  • アイコン環境/言語:[VS2010 C#] 
    分類:[.NET] 

    いつも参考にさせて頂いています。

    生成されたインスタンスに対して動的にプロパティや変数の値を取得を行いたいです。

    イメージ的には
    string getname = "Dai"."syou_A"."nameA";

    のような形で取得出来ないでしょうか。

    入れ子の入れ子?(言い方が正しいか分かりません)になった場合よく分からなくなってきました。

    public class Dai
    {
    public syou_A = new syouA();

    public syou_B {get; set;}

    public Dai()
    {
    this.syou_B = new syouB();
    }
    }

    public class syouA
    {
    public string nameA = nameA;
    public object ageA = ageA;
    }

    public class syouB
    {
    public string nameB { get; set;}
    public object ageB { get; set;}
    }

    public class Test
    {
    private dai = new Dai();

    public Test()
    {
    dai = new Dai();

    dai.syou_A.nameA = "なまえ";
    dai.syou_A.ageA = "99";

    dai.syou_B.nameB = "ナマエ";
    dai.syou_B.ageB = "0";
    }

    public void doutekiniSyutoku()
    {
    string getname = "Dai"."syou_A"."nameA";
    }
    }
違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■34284 / ResNo.1)  Re[1]: 動的にプロパティや変数の値の取得
□投稿者/ 魔界の仮面弁士 大御所(1234回)-(2019/07/28(Sun) 15:24:32)
  • アイコンNo34283に返信(ゆみとさんの記事)
    > 生成されたインスタンスに対して動的にプロパティや変数の値を取得を行いたいです。
    『何のために』そのようなことがしたいのでしょうか?

    理由如何によって、必要な対処方法も変わってくるかと
    思いますが、とりあえず幾つか例を挙げてみると…

    案1) 動的にアクセスできるよう、DynamicObject から継承するようにする
    案2) ExpandoObject クラスを使って dynamic でアクセスするようにする
    案3) Dictionary<string, Dictionary<string,dynamic>> を使う
    案4) XDocument で階層化データ構造を表すようにする
    案5) リレーション付き DataSet を使う(型付き DataSet でも可)
    案6) Microsoft.VisualBasic.Interaction.CallByName メソッドで呼び出す
    案7) リフレクションを通じて呼び出す
違反を報告
引用返信
■34285 / ResNo.2)  Re[2]: 動的にプロパティや変数の値の取得
□投稿者/ ゆみと 一般人(4回)-(2019/07/29(Mon) 11:30:25)
  • アイコン魔界の仮面弁士さん

    いつもありがとうございます。

    難しい事は考えず以下の方法で行います。

    /*syouAの場合*/
    FieldInfo field = t1.GetField("syou_A");

    var obj = field.GetValue(dai);

    Type t = obj.GetType();

    FieldInfo fieldy2 = t.GetProperty("nameA");

    string buff = fieldy2.GetValue(obj, null).ToString();

    /*syouBの場合*/
    PropertyInfo property = t1.GetProperty("syou_B");

    var obj = property.GetValue(dai, null);

    Type t = obj.GetType();

    PropertyInfo property2 = t.GetProperty("nameB");

    string buff = property2.GetValue(obj, null).ToString();

    以上

    No34284に返信(魔界の仮面弁士さんの記事)
    > ■No34283に返信(ゆみとさんの記事)
    >>生成されたインスタンスに対して動的にプロパティや変数の値を取得を行いたいです。
    > 『何のために』そのようなことがしたいのでしょうか?
    >
    > 理由如何によって、必要な対処方法も変わってくるかと
    > 思いますが、とりあえず幾つか例を挙げてみると…
    >
    > 案1) 動的にアクセスできるよう、DynamicObject から継承するようにする
    > 案2) ExpandoObject クラスを使って dynamic でアクセスするようにする
    > 案3) Dictionary<string, Dictionary<string,dynamic>> を使う
    > 案4) XDocument で階層化データ構造を表すようにする
    > 案5) リレーション付き DataSet を使う(型付き DataSet でも可)
    > 案6) Microsoft.VisualBasic.Interaction.CallByName メソッドで呼び出す
    > 案7) リフレクションを通じて呼び出す
違反を報告
引用返信
■34286 / ResNo.3)  Re[1]: 動的にプロパティや変数の値の取得
□投稿者/ 魔界の仮面弁士 大御所(1235回)-(2019/07/29(Mon) 11:57:24)
  • アイコン2019/07/29(Mon) 12:00:34 編集(投稿者)

    No34283に返信(ゆみとさんの記事)
    > 入れ子の入れ子?(言い方が正しいか分かりません)になった場合よく分からなくなってきました。

    質問文の C# 文法がおかしいので、何がやりたいのか曖昧で…。

    まずは【Dai クラス】の問題点から。

    > public class Dai
    > {
    >   public syou_A = new syouA();
    >   public syou_B {get; set;}
    >   public Dai()
    >   {
    >     this.syou_B = new syouB();
    >   }
    > }

    フィールド変数やプロパティの「型」を書き忘れているので、
    そもそも文法違反です。最低でもこうなるはずですよね。

    public class Dai {
      public syouA syou_A = new syouA();
      public syouB syou_B {get; set;}
      public Dai() { this.syou_B = new syouB(); }
    }



    さて次は【syouA クラス】の問題点。

    > public class syouA
    > {
    >  public string nameA = nameA;
    >  public object ageA = ageA;
    > }

    変数宣言と同時に、その変数を右辺に使うことは出来ません。
    未初期化変数へのアクセスということで、コンパイルエラーとなります。

    仮に同じ変数自身でなかったとしても、自身のインスタンスメンバーを
    フィールド初期化子に使うのは NG なので、たとえば
      public object ageA = "ageA";
      public string nameA = ageA;
    というのも NG ですね。


    最後は【Test クラス】の問題点については、
    Dai クラスのものと同じ理由なので割愛。

    > public class Test
    > {
    >   private dai = new Dai();


    質問の本題部となるのは、この部分ですね。

    > public void doutekiniSyutoku()
    > {
    >   string getname = "Dai"."syou_A"."nameA";
    > }



    No34284 に追記(魔界の仮面弁士)
    > 案1) 動的にアクセスできるよう、DynamicObject から継承するようにする
    > 案2) ExpandoObject クラスを使って dynamic でアクセスするようにする

    これらは「動的にメンバーを追加・取得することが目的」の場合に使うものです。

    案1 は継承が必要になりますが、動的なメンバー指定に応じて
    ファイルやデータベースに検索に行くような、MVC 的な利用が可能です。

    単純な読み書き向けだけなら、案2 でも十分です。以下サンプル。


    class Program
    {
      private static dynamic dai;
      static void Main()
      {
        // 動的なメンバー生成
        dai = new ExpandoObject();
        dai.syou_A = new ExpandoObject();
        dai.syou_B = new ExpandoObject();
        dai.syou_A.nameA = "なまえ";
        dai.syou_B.nameA = "ナマエ";
        dai.syou_A.ageA = "99";
        dai.syou_B.ageB = "0";

        // メンバー名出のアクセス
        Console.WriteLine(動的取得("syou_A", "nameA"));

        Console.ReadLine();
      }

      public static dynamic 動的取得(string member1, string member2)
      {
        dynamic syou = ((IDictionary<string, object>)dai)[member1];
        return ((IDictionary<string, object>)syou)[member2];
      }
    }


    > 案3) Dictionary<string, Dictionary<string,dynamic>> を使う
    > 案4) XDocument で階層化データ構造を表すようにする
    > 案5) リレーション付き DataSet を使う(型付き DataSet でも可)

    こっちは System.Dynamic に頼らない方法なので、C#2005 世代でも利用可能。



    > 案6) Microsoft.VisualBasic.Interaction.CallByName メソッドで呼び出す
    > 案7) リフレクションを通じて呼び出す

    元クラスの定義を変更したくないならこっち。
    No34285 は案7 に相当しますね。
違反を報告
引用返信
■34287 / ResNo.4)  Re[2]: 動的にプロパティや変数の値の取得
□投稿者/ ゆみと 一般人(5回)-(2019/07/30(Tue) 10:02:06)
  • アイコン2019/07/30(Tue) 20:45:44 編集(投稿者)
    2019/07/30(Tue) 20:45:22 編集(投稿者)

    魔界の仮面弁士さん

    いつもありがとうございます。

    ExpandoObjectを参考にさせて頂きます。
    ありがとうございます。

    質問時のサンプルプログラムは構文エラーが多く申し訳ありません。

    public class Dai
    {
    public syou_A = new syouA();

    public syou_B {get; set;}

    public Dai()
    {
    this.syou_B = new syouB();
    }
    }

    public class syouA
    {
    public string nameA = string.Empty;
    public object ageA = 0;
    }

    public class syouB
    {
    public string nameB { get; set;}
    public object ageB { get; set;}

    public syouB()
    {
    nameB = string.Empty;
    ageB = 0;
    }
    }

    public class Test
    {
    private dai = new Dai();

    public Test()
    {
    dai = new Dai();

    dai.syou_A.nameA = "なまえ";
    dai.syou_A.ageA = "99";

    dai.syou_B.nameB = "ナマエ";
    dai.syou_B.ageB = "0";
    }

    public void doutekiniSyutoku()
    {
    string getname = "Dai"."syou_A"."nameA";
    }
    }
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34268 / 親記事)  VB6 ほかのアプリケーションを起動し そのアプリケーションは終了させる方法
□投稿者/ あぽあぽ 一般人(1回)-(2019/06/26(Wed) 21:08:38)
  • アイコン環境/言語:[VB6] 
    分類:[VB6以前] 

    VB6 で 
    他EXE(アプリBとします)を起動したのち そのプログラムは終了させる方法はありますか?
    SHELL関数やobjWshShell.Runオブジェクトでは
    最初のアプリ(アプリAとします)を 終了させると 他EXE(アプリB)も 一緒に終了してしまいます。

    仕様としましては アプリAのバージョンアップを考えており
    アプリAで サーバよりダウンロードしたものを アプリBで 書き換えるといったものです。

    よろしく ご教授ください。
違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■34269 / ResNo.1)  Re[1]: VB6 ほかのアプリケーションを起動し そのアプリケーションは終了させる方法
□投稿者/ みい 一般人(6回)-(2019/06/27(Thu) 10:06:08)
  • アイコン2019/06/27(Thu) 10:15:40 編集(投稿者)

    No34268に返信(あぽあぽさんの記事)
    > VB6 で 
    > 他EXE(アプリBとします)を起動したのち そのプログラムは終了させる方法はありますか?
    Win32APIのShellExecuteではいかがでしょうか。

    第一引数の親ウインドウはNULL指定するとアプリAを終了してもアプリBは終了しません。
違反を報告
引用返信
■34270 / ResNo.2)  Re[1]: VB6 ほかのアプリケーションを起動し そのアプリケーションは終了させる方法
□投稿者/ 魔界の仮面弁士 大御所(1230回)-(2019/06/27(Thu) 15:20:25)
  • アイコンNo34268に返信(あぽあぽさんの記事)
    > SHELL関数やobjWshShell.Runオブジェクトでは
    > 最初のアプリ(アプリAとします)を 終了させると 他EXE(アプリB)も 一緒に終了してしまいます。

    下記のコードで試してみましたが、起動元のアプリケーションが終了しても、
    メモ帳や電卓が連動して終了することはありませんでした。

    Option Explicit
    Private Sub Main()
      Shell "notepad.exe"
      CreateObject("WScript.Shell").Run "calc.exe"
    End Sub
違反を報告
引用返信
■34271 / ResNo.3)  Re[2]: VB6 ほかのアプリケーションを起動し そのアプリケーションは終了させる方法
□投稿者/ あぽあぽ 一般人(2回)-(2019/06/27(Thu) 20:24:06)
http://VB6
  • アイコン
    > Win32APIのShellExecuteではいかがでしょうか。
    >
    > 第一引数の親ウインドウはNULL指定するとアプリAを終了してもアプリBは終了しません。
    どうもありがとうございました。

    教えていただいた通りで OKでした。
解決み!
違反を報告
引用返信
■34272 / ResNo.4)  Re[2]: VB6 ほかのアプリケーションを起動し そのアプリケーションは終了させる方法
□投稿者/ あぽあぽ 一般人(3回)-(2019/06/27(Thu) 20:29:41)
http://VB6
  • アイコン
    > 下記のコードで試してみましたが、起動元のアプリケーションが終了しても、
    > メモ帳や電卓が連動して終了することはありませんでした。
    >
    > Option Explicit
    > Private Sub Main()
    >   Shell "notepad.exe"
    >   CreateObject("WScript.Shell").Run "calc.exe"
    > End Sub

    どうもありがとうございます。

    結果として 上記のみい様の 方法でOKでしたのですが
    魔界の仮面弁士様 ご指摘の通りやってみて うまくいきました。

    たぶん アプリBは IDE実行では正常でしたが EXEで実行でエラーが出ていたのじゃないだろうかと 今、考えました。
    アプリAも アプリBも この質問以降に 多少の手直しをした結果 正常に動くようになってしまったのかと、もっとはやく気付かなかったことに 反省しております。

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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34265 / 親記事)  MouseEventArgsのカレント座標
□投稿者/ あばば無人君 一般人(4回)-(2019/05/27(Mon) 14:38:23)
  • アイコン環境/言語:[Win10Pro(Ver1809)、C#(.Net4.7.1)] 
    分類:[.NET] 

    現在、Win10Pro(Ver1809)+C#(.Net4.7.1)の環境でタイトルバーの無い
    フォームアプリケーション※を作成しております。
    ※FormのプロパティFormBorderStyle=None

    ただ、このアプリは移動はさせたいとの事なのでMouseDown/MouseMove/MouseUpの
    イベントを設定して以下の実装をしております。
    (マウスでフォームをドラッグして移動できる実装)

    private bool IsFormMoveStart = false;
    private Point MouseLocation;

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
    Debug.WriteLine("マウスダウンイベント発生!:" + e.Button + e.Location);

    IsFormMoveStart = true;
    MouseLocation = e.Location;
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
    if (IsFormMoveStart)
    {
    Debug.WriteLine("マウスムーブイベント発生!:" + e.Button + e.Location);

    /// マウスの移動距離(ピクセル?)を求める
    int moveX = e.Location.X - MouseLocation.X;
    int moveY = e.Location.Y - MouseLocation.Y;

    /// マウスの移動距離分だけ当EXEフォームも移動させる
    this.Location = new Point(this.Location.X + moveX,
    this.Location.Y + moveY);

    // MouseLocation = e.Location; ★
    }
    }

    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
    Debug.WriteLine("マウスアップイベント発生!:" + e.Button + e.Location);

    IsFormMoveStart = false;
    }

    質問はこのフォームを実際にマウスで移動した時の以下ログのX座標の値です。

    マウスダウンイベント発生!:Left{X=200,Y=100} -@
    マウスムーブイベント発生!:Left{X=200,Y=100} -A
    マウスムーブイベント発生!:Left{X=201,Y=100} -B
    マウスムーブイベント発生!:Left{X=200,Y=100} -C
    マウスアップイベント発生!:Left{X=200,Y=100} -D

    @A行目はフォームをマウスで押下(指は解放していない)した時の物で、
    X座標はその時点の値が出力されていて問題は無い認識です。

    次に右へ1ピクセル動かしたログがBCなのですが、Bで200 → 201 となったのに
    Cで200に戻っています。
    また、指を開放した時のDも同様です。

    最初は私の操作がおかしいのかと思いましたが、何度やってもフォームは確実に
    1ピクセル動いていますし、また他の人間に操作させても同じ結果でした。

    CDで1ピクセル小さい値がイベントとして上がってくる原因が分かる方は
    いらっしゃいますでしょうか?

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34266 / ResNo.1)  Re[1]: MouseEventArgsのカレント座標
□投稿者/ Hongliang 大御所(561回)-(2019/05/27(Mon) 15:32:22)
  • アイコン2019/05/27(Mon) 15:45:02 編集(投稿者)

    e.Locationは、senderであるコントロールの左上を (0, 0) とするクライアント座標系で表されています。
    マウスを右に1ピクセル動かすと、フォームがそれに続いて右に1ピクセル移動されるため、結局クライアント座標系におけるマウスカーソル位置は元に戻ることになります。

    追記。
    マウスが動いていなくても、フォームの方が移動した時、MouseMoveイベントが発生します。
違反を報告
引用返信
■34267 / ResNo.2)  Re[2]: MouseEventArgsのカレント座標
□投稿者/ あばば無人君 一般人(6回)-(2019/05/27(Mon) 16:11:24)
  • アイコンNo34266に返信(Hongliangさんの記事)
    > 2019/05/27(Mon) 15:45:02 編集(投稿者)

    > e.Locationは、senderであるコントロールの左上を (0, 0) とするクライアント座標系で表されています。
    > マウスを右に1ピクセル動かすと、フォームがそれに続いて右に1ピクセル移動されるため、結局クライアント座標系におけるマウスカーソル位置は元に戻ることになります。

    Oh!その通りですね。
    しょぼいレベルの質問にお答えして頂き本当にありがとうございました。



    > 追記。
    > マウスが動いていなくても、フォームの方が移動した時、MouseMoveイベントが発生します。

    ご丁寧にありがとうございました。



    本件、解決済みとさせて頂きます。

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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34261 / 親記事)  リッチテキストボックスでの字間の調整
□投稿者/ kohei 一般人(1回)-(2019/05/26(Sun) 07:57:03)
  • アイコン環境/言語:[VB.NET] 
    分類:[.NET] 

    VisualStudio2019のVBで、リッチテキストボックスを使ったプログラムを作ってるのですが、
    字間の調整ができずに困っています…。

    単純なテキストファイルを読み込んで、文字列操作で書式制御を加えてRTFを作って、色付け等を行ってます。
    RTFの解説から「\expndtw」を見つけてこれで行けると思ったのですが、変わりません…。
    生成したRTFを書き出してメモ帳(Windowアプリ)に貼り付けてワードパッドで開くと、ちゃんと字間があくので、
    RTFとしては間違えてないと思うのですが、VBで作ったプログラムの方では字間が変わりません。

    VBのリッチテキストボックスは、RTFの全ての書式が使えるわけではなく、
    何か制限(機能の限定)があるのでしょうか?

    ちょっと長いけど、その時のRTF文字列付けておきます。

    {\rtf1\ansi\ansicpg932\deff0\deflang1033\deflangfe1041{\fonttbl{\f0\fnil\fcharset128 @\'82\'6c\'82\'72 \'83\'53\'83\'56\'83\'62\'83\'4e;}}
    {\colortbl ;\red255\green255\blue221;\red221\green255\blue221;\red192\green221\blue255;\red255\green221\blue221;\red192\green192\blue192;}
    {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa20\sl0\slmult0\fs24\highlight1 :\highlight2 10\highlight3 0000\highlight4 0\expndtw120 0\expndtw0\highlight0 0\expndtw120 9\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 E\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 D\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 C\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 B\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 A\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 9\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 8\expndtw0 C\expndtw120 0\expndtw0 \expndtw0\highlight5 9A\highlight0\par
    \highlight1 :\highlight2 02\highlight3 0000\highlight4 0\expndtw120 0\expndtw0\highlight0 7\expndtw120 A\expndtw0 F\expndtw120 E\expndtw0 \expndtw0\highlight5 86\highlight0\par

    (ワードパッドのスクショつけようとしたけど、サイズで拒否されました…。上記を張り付けして見たらバレバレと思いますが、IntelHexフォーマットを色付きで表示したいプログラムです。)
違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34263 / ResNo.1)  Re[1]: リッチテキストボックスでの字間の調整
□投稿者/ 魔界の仮面弁士 大御所(1229回)-(2019/05/26(Sun) 16:49:13)
  • アイコン
    No34261に返信(koheiさんの記事)
    > ちょっと長いけど、その時のRTF文字列付けておきます。
    『{』の個数が、『}』の個数より多いような…?
    
    
    > VisualStudio2019のVBで、リッチテキストボックスを使ったプログラムを作ってるのですが、
    ターゲットとしている .NET Framework バージョンと
    実行環境の OS バージョンは何でしょうか?
    
    
    > VBのリッチテキストボックスは、RTFの全ての書式が使えるわけではなく、
    > 何か制限(機能の限定)があるのでしょうか?
    
    RTF 仕様について学ばれているようなので、既にご存知とは思いますが、
    RTF には幾つかのバージョンがあり、バージョン間で機能面に差異があります。
    https://ja.wikipedia.org/wiki/Rich_Text_Format#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE%E5%B1%A5%E6%AD%B4
    
    また、それを扱う Rich Edit Control にも複数のバージョンがあります。
    https://blogs.msdn.microsoft.com/murrays/2006/10/13/richedit-versions/
    
    どのバージョンの DLL が利用されるのかは、使用している
    .NET Framework バージョンによって異なっていますが、元々は
    いわゆる RichEd20.DLL がロード対象であったと記憶しています。
    リリース当初は RichEdit 3.0 相当(ただし Win98 では 2.0 相当)かと。
    
    しかし実際に動作させてみると、たとえば .NET Framework の
    3.5 と 4.7.2 とでは、RTF の解釈に差が生じることがあります。
    
    これは 4.6 において、RichEd20.DLL よりも MsftEdit.DLL を
    優先利用するための機能が用意されたためです。しかし互換性上の理由から
    既定では RichEd20.DLL が引き続き利用されるようになっていました。
    
    ただし 4.7 では、MsftEdit.DLL が優先利用されるよう変更されました。
    
    4.6 以降では、この DLL バージョンのためのオプトアウトスイッチとして
    DoNotLoadLatestRichEditControl が設けられました。
    動作を切り替えるためには、app.config 上に下記の項目を追加できます。
    
    
    <configuration>
      <runtime>
        <!--
        <AppContextSwitchOverrides value="Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl=false"/>
        <AppContextSwitchOverrides value="Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl=true"/>
        -->
      </runtime>
    </configuration>
    
    ※上記は WinForms の場合の話です。WPF その他については未調査です。

違反を報告
引用返信
■34264 / ResNo.2)  解決しました!
□投稿者/ kohei 一般人(2回)-(2019/05/26(Sun) 17:37:41)
  • アイコン2019/06/02(Sun) 17:32:13 編集(投稿者)
    2019/05/26(Sun) 22:32:05 編集(投稿者)
    2019/05/26(Sun) 22:31:53 編集(投稿者)

    > ターゲットとしている .NET Framework バージョンと
    > 実行環境の OS バージョンは何でしょうか?

    .NET Frameworkは「2.0」にしてました。
    これを、プロジェクトのプロパティから、選択肢の中の最新の「4.7.2」に変更したら、
    ちゃんと字間があくようになりました!
    (ちなみに、OSはWindows10です。まず3.5にしてみてダメ、4.6でもダメ、4.7.2に変更でOKになりました。)

    ほぼ初めてVisualBasicでプログラムを作ってみてるのですが、
    プロジェクト作り始めて「.NET Frameworkはどれ使う?」と聞かれたときに、
    「ブログで公開したりした時に、バージョンが古い方が他の人が使いやすいのかな?」
    とか思って、なんかよく見る「2.0」にしてみたのでしたww。

    RTFについて学んでいるなんて状況には程遠く、ネットのあちこちから拾い集めて
    なんとかプログラムを作ってみています。
    あと二息ぐらいで完成すると思うので、完成したらブログにアップします。
    https://blog.goo.ne.jp/kohei-m/e/18fadcb17eeea12d1932dcfab4b01723

    ご回答、大変ありがとうございました!

    (追記)
    力作(?)、完成しました〜。
    https://blog.goo.ne.jp/kohei-m/e/7981a3392f041a855b9c426e332be395
    大変ありがとうございました。
解決み!
違反を報告
引用返信

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



■記事リスト / ▲上のスレッド
■34257 / 親記事)  DrawImage でメモリ不足エラー
□投稿者/ たけさん 一般人(1回)-(2019/05/16(Thu) 15:34:25)
  • アイコン環境/言語:[環境(Windows10 64bit)、使用言語(Visual Studio2013 VB.NET)] 
    分類:[.NET] 

    2つの画像の重なる箇所を画像として切り取り処理を行っています。
    350KBのファイルは問題ないのですが、32MBなどのファイルは、DrawImage でメモリ不足となってしまいます。
    ご教授宜しくお願い致します。


    Dim part As ePart = _parts.Parts(0)
    Dim 画像@ As RectangleF = New RectangleF(位置,サイズ)
    Dim 画像A As RectangleF = New RectangleF(位置,サイズ)
    Dim roiTrim As RectangleF = RectangleF.Intersect(画像@, 画像A)
    Dim dst As Bitmap = New Bitmap(幅, 高さ)
    Dim g As Graphics = Graphics.FromImage(dst)

    Dim B切り取る部分の範囲 As RectangleF
    Dim C描画する部分の範囲 As RectangleF

    g.DrawImage(part.Image, B切り取る部分の範囲, C描画する部分の範囲, GraphicsUnit.Pixel)
    trimImg = dst
    g.Dispose()
違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■34258 / ResNo.1)  Re[1]: DrawImage でメモリ不足エラー
□投稿者/ 魔界の仮面弁士 大御所(1227回)-(2019/05/16(Thu) 16:31:32)
  • アイコンNo34257に返信(たけさんさんの記事)
    > 350KBのファイルは問題ないのですが、32MBなどのファイルは、DrawImage でメモリ不足となってしまいます。

    メモリ不足となるのであれば、残念ながら GDI+ または実行環境の
    限界ということで、どうにもならないような気がします。

    それでなくとも、巨大なファイルを DrawImage すると
    パフォーマンスが目に見えて悪くなるという問題がありますし。
    https://dobon.net/vb/bbs/log3-39/23844.html


    駄目元で、OpenCV で読み込めないか試してみるのはどうでしょう。
違反を報告
引用返信
■34259 / ResNo.2)  Re[2]: DrawImage でメモリ不足エラー
□投稿者/ たけさん 一般人(2回)-(2019/05/16(Thu) 18:53:41)
  • アイコン
    ご回答ありがとうございました。
    参考になりました。限界という事で納得しました。
    OpenCVも試してみたいと思います。
違反を報告
引用返信
■34260 / ResNo.3)  Re[3]: DrawImage でメモリ不足エラー
□投稿者/ たけさん 一般人(3回)-(2019/05/16(Thu) 18:56:20)
  • アイコン
    解決とさせて頂きます。

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

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






Mode/  Pass/


- Child Tree -

2021/01/28(Thu) 08:55:15 に作成されたキャッシュを表示しています。
生のデータを表示する | キャッシュを最新にする