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

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

記事リスト ( )内の数字はレス数
UpDateVB.netにおける固定長出力方法(3) | NomalDataObjectの使いまわし(5) | NomalVB.NETからRDゲートウェイを利用したリモートデスクトップ接続(3) | 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) | NomalVisual Studio DataTableの値のアクセスの仕方(2) | NomalDatagridviewのクリア(2) | NomalDataGridView 行の背景色の設定(2) | NomalListBoxにデータが表示されない(6) | NomalPIctureBox同士を論理合成したい(3) | NomalDrawString前のFillRectangle有無により文字の太さが違う理由について教えて下さい(3) | Nomalポルトガル語の登録(5) | NomalnumericUpDwonコントロールのvalue(2) | Nomalデータセット定義ファイルからDataTable(3) | NomalDataTableの構造が同じか調べるメソッド(2) | Nomalネットの画像の複数枚を重ね合わせたい(3) |



■記事リスト / ▼下のスレッド
■34294 / 親記事)  マウスのないOSでマウスカーソルの表示
□投稿者/ ぺんたごん 一般人(34回)-(2019/09/07(Sat) 23:12:45)
  • アイコン環境/言語:[C#,VB.NET,Delphi,WinAPI] 
    分類:[その他] 

    こんにちわ。

    今回、諸事情でマウスが無いWindows10があります。
    ハード的にマウスがないときにはマウスカーソルが表示されませんが、
    ツールでゲームパッドやキーボードを仮想マウスとして使うと内部的には
    移動やクリックができるようです。

    そこで、C#/VB.NETのWinFormsでも、あるいはDelphiのVCLでも
    素のWinAPIでも構わないので、なにかOS全体のマウスカーソルを表示する術はないでしょうか。

    ググってもほとんど情報がなく、
    ShowCursorは呼び出したプロセス内だけでしか有効にならないようでしたし、
    .NETのCursor.Currentへの設定はなぜか一瞬でもとに戻ってしまいます。

    何卒ご教示ください
違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34295 / ResNo.1)  Re[1]: マウスのないOSでマウスカーソルの表示
□投稿者/ Honzeee 一般人(1回)-(2019/09/28(Sat) 06:57:11)
  • アイコンあまり回答にはなっていませんが。。。

    なぜ、マウスカーソルを表示させる必要があるのですか?
    ソフトウェアで強制的に表示させる理由はなんですか?

    Windows自体、起動してから一度でもハード的にマウスを認識したら、その後はずっと表示します。
    ですので、一瞬だけ接続もしくは使っていないマウス(本体が故障した無線式の受信機)を接続しておけばいいとはおもいますが。

    ソフトウェアで偽装するより、ハードウェア的に解決したほうがいいと思います。
    Windowsの裏をかいてシステム的な不安定を作り出すよりは建設的でリスクも少ないと思いますよ。


    No34294に返信(ぺんたごんさんの記事)
    > こんにちわ。
    >
    > 今回、諸事情でマウスが無いWindows10があります。
    > ハード的にマウスがないときにはマウスカーソルが表示されませんが、
    > ツールでゲームパッドやキーボードを仮想マウスとして使うと内部的には
    > 移動やクリックができるようです。
    >
    > そこで、C#/VB.NETのWinFormsでも、あるいはDelphiのVCLでも
    > 素のWinAPIでも構わないので、なにかOS全体のマウスカーソルを表示する術はないでしょうか。
    >
    > ググってもほとんど情報がなく、
    > ShowCursorは呼び出したプロセス内だけでしか有効にならないようでしたし、
    > .NETのCursor.Currentへの設定はなぜか一瞬でもとに戻ってしまいます。
    >
    > 何卒ご教示ください
違反を報告
引用返信
■34296 / ResNo.2)  Re[2]: マウスのないOSでマウスカーソルの表示
□投稿者/ Honzeee 一般人(2回)-(2019/09/28(Sat) 07:40:53)
  • アイコン何かしらのデバッグ用途で位置を知りたいのであればCTRLを押したらポインタの位置を教えてくれる機能(設定)がWindowsにはありますので、代用してみては?

    マウスが存在しなくてもポインタの位置を教えてくれます。
    カーソルがないので不思議な感覚ですが。
    https://hamachan.info/win10/win/mouse_c.html


    No34295に返信(Honzeeeさんの記事)
    > あまり回答にはなっていませんが。。。
    >
    > なぜ、マウスカーソルを表示させる必要があるのですか?
    > ソフトウェアで強制的に表示させる理由はなんですか?
    >
    > Windows自体、起動してから一度でもハード的にマウスを認識したら、その後はずっと表示します。
    > ですので、一瞬だけ接続もしくは使っていないマウス(本体が故障した無線式の受信機)を接続しておけばいいとはおもいますが。
    >
    > ソフトウェアで偽装するより、ハードウェア的に解決したほうがいいと思います。
    > Windowsの裏をかいてシステム的な不安定を作り出すよりは建設的でリスクも少ないと思いますよ。

違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34293 / 親記事)  RDP接続でのネットワーク帯域制限
□投稿者/ Tamino 一般人(1回)-(2019/08/30(Fri) 17:19:07)
  • アイコン環境/言語:[Windows 10 64Bit/VB.NET] 
    分類:[.NET] 

    VB.NET上のMicrosoft RDP Client Controlを使用してRDPクライアントを作成しようとしています
    1つのクライアントPC上で複数のRDPセッションを同時に行う仕様なのですが
    ネットワーク帯域の節約を目的としてアイコン化(最小化)などで画面上に
    表示が行われていない時には接続を維持したままRDPの表示更新を抑止できればと思っています
    RDP Client Controlに対して一時的にサーバからの表示データ受信抑止を行う手段をご存じないでしょうか?
    タスクマネージャなどでネットワーク帯域を見ているとWindows標準のmstsc.exeは
    アイコン化したときに(音声はそのままのようですが)画像表示データの受信を
    行っていないように見受けられます
    これと同じようなことができればと思っています
違反を報告
引用返信



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34273 / 親記事)  FILE.COPYでIOExceptionエラーが出る
□投稿者/ オフィス・ケイ 一般人(1回)-(2019/07/03(Wed) 09:25:29)
  • アイコン環境/言語:[WindowsCE6.0 VB.NET2008 .NET Compact FrameWork3.5 ] 
    分類:[.NET] 

    初めまして。
    初めて投稿します。

    現在、Vb.net2008でPDAの開発を行っています。
    PDAのOSはWindows CE6.0になります。
    フレームワークは.net CompactFrameWork3.5です。

    処理内容として、PDAで作成されたテキストファイルをネットワーク越しの共有フォルダにコピーしています。

    File.COYを使用しているのですが、稀にシステムエラー(IOException)で処理が落ちるのです。
    原因として何が考えられるのでしょうか?
    ネットワークは無線LANで接続しています。

    ----- 参考ソース ------

    sFileRireki:送信元ファイル
    sFileTRireki:送信先ファイル
    psInit.sUpLoadD:送信先フォルダ

    Try

    If File.Exists(sFileRireki) = True Then 'あり
    If Directory.Exists(psInit.sUpLoadD + "\") = False Then
    sErrMsg = "アップロード先フォルダが無いか、ネットワーク接続できませんでした。(COPY直前チェック)" + vbCrLf + psInit.sUpLoadD
    Return False
    End If
    IO.File.Copy(sFileRireki, sFileTRireki,True)
    '送信後、削除
    If File.Exists(sFileRireki) = True Then
    File.Delete(sFileRireki)
    Else
    Return False
    End If
    Else
    Return False
    End If
    Catch ex As Exception
    sErrMsg = "アップロード(履歴データ送信)に失敗しました。" + vbCrLf + vbCrLf + ex.Message
    Return False
    Finally
    Call sub_WriteLog(sErrMsg, "", pciLogModeE, "fnc_LogDataSend")
    End Try

    ------- エラー内容 ----------

    アップロード(履歴データ送信)に失敗しました。IOException

    以上になります。
    よろしくお願いします。

違反を報告
引用返信

▽[全レス11件(ResNo.7-11 表示)]
■34280 / ResNo.7)  Re[6]: FILE.COPYでIOExceptionエラーが出る
□投稿者/ オフィスケイ 一般人(2回)-(2019/07/10(Wed) 08:05:16)
  • アイコンNo34278に返信(魔界の仮面弁士さんの記事)

    > ユーザー環境でのみ発生する事象という事で追跡しにくいですが、
    > 母艦(ファイル送信先)側で監査ログを取るようにして、
    > 例外が発生した時刻付近のイベント ビューワーのログが、
    > いつもと違う内容になっていないか確認してみては如何でしょう。



    =>ご回答ありがとうございます。
     監査ログを取るなどして、もう少し調べてみたいと思います。


違反を報告
引用返信
■34281 / ResNo.8)  Re[2]: FILE.COPYでIOExceptionエラーが出る
□投稿者/ オフィスケイ 一般人(3回)-(2019/07/10(Wed) 08:07:18)
  • アイコンNo34279に返信(kikuさんの記事)
    >
     回答ありがとうございます。
     ご提示して頂いた内容を踏まえ、いろいろとやってみたいと思います。
     ありがとうございました。
違反を報告
引用返信
■34282 / ResNo.9)  Re[4]: FILE.COPYでIOExceptionエラーが出る
□投稿者/ オフィス・ケイ 一般人(2回)-(2019/07/16(Tue) 13:13:25)
  • アイコンNo34276に返信(魔界の仮面弁士さんの記事)
    > ■No34275に返信(オフィス・ケエイさんの記事)
    >
    > また、エラー発生時点の StackTrace を記録することは出来ますか?
    > (Exception の ToString でも OK です)

    => 下記にExceptionのToStringを取りました。

    System.IO.IOException:
    IOException
    場所 System.IO.__Error.WinIOError(Int32 errorCode, String str)
    場所 System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)
    場所 〇〇.mod_〇〇.fnc_LogDataSend(String& sErrMsg, StatusBar stbMsg)
    場所 〇〇.frm01_Main.ProcUpLoad()
    場所 〇〇.frm01_Main.btnSave_Click(Object sender, EventArgs e)
    場所 System.Windows.Forms.Control.OnClick(EventArgs e)
    場所 System.Windows.Forms.Button.OnClick(EventArgs e)
    場所 System.Windows.Forms.ButtonBase.WnProc(WM wm, Int32 wParam, Int32 lParam)
    場所 System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
    場所 Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
    場所 System.Windows.Forms.Application.Run(Form fm)
    場所 〇〇.mod_〇〇.Main()

    ※〇〇はユーザー名が入っているので、隠しますね。

    この内容で何かわかりますでしょうか?


違反を報告
引用返信
■34288 / ResNo.10)  Re[5]: FILE.COPYでIOExceptionエラーが出る
□投稿者/ 魔界の仮面弁士 大御所(1236回)-(2019/07/30(Tue) 11:49:55)
  • アイコン2019/07/30(Tue) 11:50:26 編集(投稿者)

    No34282に返信(オフィス・ケイさんの記事)
    > System.IO.IOException:
    > IOException
    > 場所 System.IO.__Error.WinIOError(Int32 errorCode, String str)
    > 場所 System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)
    > 場所 〇〇.mod_〇〇.fnc_LogDataSend(String& sErrMsg, StatusBar stbMsg)


    File.InternalCopy が呼ばれるのは、
    System.IO.File の Copy メソッドもしくは
    System.IO.FileInfo の CopyTo メソッドのいずれかですね。

    そして、InternalCopy が直接 __Error.WinIOError を呼び出す箇所は、
    No34274 で言う所の 3 または 13 のいずれかしかなく、
    最終結果が IOException であることから、13 であったと思われます。

    ただ、CopyFile API がどうしてそういう errorCode を吐いたのかは不明のまま…。


    No34275に返信(オフィス・ケエイさんの記事)
    > また、その後はリトライしても同様にIOExceptionで落ちます。
    >  プログラムを一旦終了し、再度起動させるとうまくいきます。

    通信障害などで失敗した時に、それを引きずってしまうのかな…。

    アプリケーションの再起動で回避できるようなので、
    No34276 の最後に書いたように、ファイルコピー用の exe を用意し、
    System.Diagnostics.Process.Start で呼び出す方式でリトライするとか。

    .NET Compact Framework 1.0 では Process クラスが無いけれど、
    .NET Compact Framework 2.0 以降なら使えるはず。
違反を報告
引用返信
■34292 / ResNo.11)  Re[3]: FILE.COPYでIOExceptionエラーが出る
□投稿者/ オフィス・ケイ 一般人(3回)-(2019/08/02(Fri) 08:09:08)
  • アイコンお世話になります。

    file.copyに失敗したとき、
    現状は1回の失敗でエラーを出力して終わっていましたが
    何回かリトライしてそれでもだめだったらエラーを吐き出す。
    ように修正して様子を見てみます。

    回答を頂いた皆様ありがとうございました。

    この件は一旦解決済みとさせていただきます。

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

■記事リスト / レス記事表示 → [親記事-9] [10-11]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34289 / 親記事)  ToolStripMenuItemにShortcutKeysを指定した際の、元のコントロールを取得する方法
□投稿者/ z-f 一般人(1回)-(2019/07/31(Wed) 15:13:57)
  • アイコン環境/言語:[C# WinForms .NETFramework 4.7.2 ] 
    分類:[.NET] 

    ContextMenuStripを使ってTextBox用のコンテキストメニューを作成中です。
    ToolStripMenuItemにShortcutKeysを指定して、メニューをクリックした時とショートカットキーを押した場合で同じ挙動をさせたいのですが、
    ショートカット使用時はthis.SourceControl=nullとなってしまい、使用元のTextBoxが取得できずに困っています。
    何か良い方法は無いでしょうか?
違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34290 / ResNo.1)  Re[1]: ToolStripMenuItemにShortcutKeysを指定した際の、元のコントロールを取得する方法
□投稿者/ 魔界の仮面弁士 大御所(1237回)-(2019/07/31(Wed) 16:28:03)
  • アイコン2019/07/31(Wed) 16:30:06 編集(投稿者)

    No34289に返信(z-fさんの記事)
    > ショートカット使用時はthis.SourceControl=nullとなってしまい、使用元のTextBoxが取得できずに困っています。

    キーボードショートカットを使う際には、そのコントロールが
    アクティブになっているでしょうから、
    ActiveControl プロパティで判断できるかもしれません。


    private void toolStripMenuItem1_Click(object sender, EventArgs e)
    {
      // var menu = (ToolStripMenuItem)sender;
      var sourceControl = contextMenuStrip1.SourceControl ?? (ActiveForm ?? this).ActiveControl;
      if (sourceControl != null)
      {
        MessageBox.Show(sourceControl.Name);
      }
    }
違反を報告
引用返信
■34291 / ResNo.2)  Re[2]: ToolStripMenuItemにShortcutKeysを指定した際の、元のコントロールを取得する方法
□投稿者/ z-f 一般人(2回)-(2019/07/31(Wed) 18:13:40)
  • アイコンなるほど、ActiveControlは思いつかなかった。
    これでなんとかなりそうです。感謝。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-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]






Mode/  Pass/


- Child Tree -

2020/12/03(Thu) 01:26:37 に作成されたキャッシュを表示しています。
生のデータを表示する | キャッシュを最新にする