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

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

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



■記事リスト / ▼下のスレッド
■35476 / 親記事)  ファイルとして配置したマニフェストを優先したい
□投稿者/ ぺんたごん 一般人(6回)-(2023/07/20(Thu) 16:15:00)
  • アイコン環境/言語:[Windows 10 .NET 4.6.2] 
    分類:[.NET] 

    ごぶさたしてます。

    タイトル通りなんですが、経緯としては
    他社製ゆえにバイナリをいじれないWinForms使ったexeがあり、
    こちらはプラグインとしてアセンブリdllを作ってる状況です。

    このdllでもWinFormsで画面を出すようになってますが、
    そこにはWPF製のコントロールを配置してます。
    高DPI環境で動かすと、この画面が表示されるタイミングで
    親(exe)も子(dll)もフォームサイズが急に小さくなります。
    exeが高DPI対応してない(文字がぼやけてる)からだと思いますが、
    似た構成の実験exe+実験dllでも同じ現象となりました。

    (実験exeで)埋め込みマニフェストのdpiAwareをtrueにすると
    当然正しく動きますが、そうではない状態で
    diAwareをtrueにした〇〇.exe.manifestを
    exeと同じ場所に配置しても効いていない状態です。

    既にexeにマニフェストが埋め込まれている場合は外部マニフェストファイルは無視されるようですが、
    exeをいじらずにファイルの方を優先させる手段はあるのでしょうか。
    あるいは、exeのマニフェストを(リビルドせずバイナリ操作で)差し替えるツールなどはあるのでしょうか。

    ※exeのファイルプロパティの互換性タブで高DPI対応できるのは知ってますが、
     セットアップ端末全てで実施が必要なので最終手段です

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

▽[全レス2件(ResNo.1-2 表示)]
■35477 / ResNo.1)  Re[1]: ファイルとして配置したマニフェストを優先したい
□投稿者/ 魔界の仮面弁士 大御所(1557回)-(2023/07/20(Thu) 17:36:48)
  • アイコンNo35476に返信(ぺんたごんさんの記事)
    > exeのマニフェストを(リビルドせずバイナリ操作で)差し替えるツールなどはあるのでしょうか。

    Visual Studio の [ファイル]-[開く]-[ファイル] メニューで
    exe を開けば、RT_MANIFEST を直接改竄できます。


    ただし電子署名付の実行ファイルの場合は注意が必要です。

    改竄行為によって、署名検証を通過しなくなるためです(たとえば下記)。
     signtool verify /pa /v X:\target.exe
    その場合、無効な署名のままで放置するのか、それとも
    自前でコードサイニングを埋め直すか…という判断になるかと思います。
違反を報告
引用返信
■35478 / ResNo.2)  Re[2]: ファイルとして配置したマニフェストを優先したい
□投稿者/ ぺんたごん 一般人(7回)-(2023/07/21(Fri) 12:08:10)
  • アイコンNo35477に返信(魔界の仮面弁士さんの記事)
    ありがとうございます。
    exe改変も最終手段としておきます
    ※実際には私はWPFコントロール部品しか作っておらず、
     このdllを作ってるのはさらに別チームで、今回の現象を
     相談されてるだけなのでexeの詳細を知らない状態です

    あと調べていたらVista以降は埋め込まれたマニフェストが優先されるようですね…
    回避手段はなさそう

違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35467 / 親記事)  TabPageの背景色
□投稿者/ くるり 一般人(1回)-(2023/07/08(Sat) 22:40:02)
  • アイコン環境/言語:[.NET Framework 4.8 , Windows11 , VB.Net] 
    分類:[.NET] 

    お世話になっています。

    TabPageにTextboxを設置し、背景色(BackColor)をTabPageと同色にしようと試みていますが、TabPageの背景色初期値がTransparentのため、Textboxの背景色には設定できません。
    TabPageの親コントロールであるTabControlにはそもそも背景色を設定するプロパティはなく、かといって、Formの背景色ともTabPageの背景色は異なります。

    イメージとしては、ファイルなどのプロパティにある編集不可のTextboxのように親コントロールと同色のReadonlyのTextboxを設置したいのですが、何か良い方法はあるでしょうか。
    (Labelコントールは、テキストを選択できないのでNG)

    最後の手段としては、TabPageの背景色である#F9F9F9を直接指定しようと思いますが、コントロールの色や形状はOSのバージョンに依存するので、できれば、TabPageと同色の背景色を自動で設定できるようにしたいと考えています。
違反を報告
引用返信

▽[全レス5件(ResNo.1-5 表示)]
■35468 / ResNo.1)  Re[1]: TabPageの背景色
□投稿者/ くるり 一般人(2回)-(2023/07/08(Sat) 22:47:17)
  • アイコン補足です。

    >TabPageの背景色である#F9F9F9を直接指定しようと思いますが

    この色は、TabPageのスクリーンショットを取って、ペイントで確認したものです。
違反を報告
引用返信
■35469 / ResNo.2)  Re[1]: TabPageの背景色
□投稿者/ KOZ 一般人(21回)-(2023/07/09(Sun) 19:46:06)
  • アイコン
    No35467に返信(くるりさんの記事)
    > 親コントロールと同色のReadonlyのTextboxを設置したいのですが、何か良い方法はあるでしょうか。
    
    DrawToBitmap で bmp に描画して、GetPixel で色を取得するとか。
    
    Public Class Form1
    
        Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
            Dim sz = TabPage1.Size
            Using bmp As New Bitmap(sz.Width, sz.Height)
                TabPage1.DrawToBitmap(bmp, New Rectangle(Point.Empty, sz))
                Dim bkColor = bmp.GetPixel(1, 1)
                TextBox1.BackColor = bkColor
            End Using
        End Sub
    
    End Class

違反を報告
引用返信
■35470 / ResNo.3)  Re[2]: TabPageの背景色
□投稿者/ くるり 一般人(3回)-(2023/07/10(Mon) 04:39:52)
  • アイコン>DrawToBitmap で bmp に描画して、GetPixel で色を取得するとか。

    サンプルコードをご提示いただき、ありがとうございます。
    こんな簡単に色情報を取得できるのですね。目からうろこです。

    ご提示いただいたコードを参考にすることで、目的としている機能の実装ができました。
    ありがとうございます。
解決み!
違反を報告
引用返信
■35471 / ResNo.4)  Re[3]: TabPageの背景色
□投稿者/ 魔界の仮面弁士 大御所(1556回)-(2023/07/10(Mon) 11:02:30)
  • アイコンNo35470に返信(くるりさんの記事)
    > こんな簡単に色情報を取得できるのですね。目からうろこです。

    ちなみに、TabPage の背景色は単色とは限りません。

    OS 側の設定テーマによっては、グラデーションがかかっているなど、
    座標ごとに複数の色が使用されていることがあります。
    http://dobon.net/vb/dotnet/graphics/drawvisualcontrol.html

    https://rarara.org/community/programming/%E3%82%BF%E3%83%96%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AE%E8%83%8C%E6%99%AF%E8%89%B2%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F/
解決み!
違反を報告
引用返信
■35472 / ResNo.5)  Re[4]: TabPageの背景色
□投稿者/ くるり 一般人(4回)-(2023/07/10(Mon) 23:44:17)
  • アイコン2023/07/11(Tue) 12:09:39 編集(投稿者)
    2023/07/11(Tue) 12:06:40 編集(投稿者)

    > ちなみに、TabPage の背景色は単色とは限りません。
    > OS 側の設定テーマによっては、グラデーションがかかっているなど、
    > 座標ごとに複数の色が使用されていることがあります。

    情報ありがとうございます。

    なるほど。
    実は、どこかののプロパティなどから取得できないものか、
    もやもやしたものがありましたが、TabPageの背景色はグラデーションが
    設定されているなどOSのテーマに依存しており、プロパティから取得できる類の
    ものではなさそうですね。

    教えていただいたURLも参考になりそうです。ありがとうございます。

    サンプルはC++でしたが、VB.Netでグラデーションを想定した対応を実装するとすれば
    ・同じサイズのTabPage背景をメモリ上に描画(http://dobon.net/vb/dotnet/graphics/drawvisualcontrol.html)
    ・Textboxがある座標の画像を切り抜き、ブラシを作成
    ・ブラシを用いてTextboxを描画(OwnerDraw)
    といった流れですね。おそらく。

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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35461 / 親記事)  C#でJpeg圧縮のTiffファイルを作成したい
□投稿者/ たろう 一般人(1回)-(2023/06/26(Mon) 10:58:52)
  • アイコン環境/言語:[Windows10 / C# / VisualStudio2015 / .Net Framework4.0] 
    分類:[.NET] 

    過去、Visual Studio 2015を使って、Tiffファイルを作成するアプリケーションを作成しました。

    最近になって「LEADTOOLSではJpeg圧縮のTiffファイルが作れるのに、あなたのソフトではできないのか?」といった問い合わせをもらいました。
    どうやらTiffでイメージ保存をしたいが、カラー画像だとサイズが大きいので画像はJpegにしたい(でもファイル形式はTiffのまま)ということのようです。

    私が作成した保存処理はTiffBitmapEncoderを使用しており、Compressionプロパティにセットできるものを調べるとJpegはありませんでした。

    有料のライブラリなどを使用せず、Jpeg圧縮のTiffファイルを保存する方法はないものでしょうか。
    (LEADTOOLSはライセンス料が高額なため使用したくない、という理由で.Netの機能を使用して画像保存を作成した経緯があります)

違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■35462 / ResNo.1)  Re[1]: C#でJpeg圧縮のTiffファイルを作成したい
□投稿者/ Hongliang 大御所(643回)-(2023/06/26(Mon) 12:48:38)
  • アイコンとりあえず、Windows 10 22H2では、 TiffBitmapEncoderを使っては無理みたいですね。
    // System.Windows.Media.Imaging.TiffCompressOptionには未定義の7というのも指定可能でしたが、これもLZWベースのようです。
    System.Drawingの方でも有効そうなものは見つからないので、少なくとも現時点では、恐らく.NET標準ライブラリでは扱えないでしょう。

    // System.Windows.Media.ImagingにせよSystem.DrawingにせよOSの機能をそのまま呼び出しているだけなので、そのうちWindowsのTIFFエンコーダがサポートするようになる可能性はゼロではないですが、期待薄と思います。

    どうしてもというなら、何らかのサードパーティ製ライブラリを使用するしかないでしょうね。
    NugetにはいくつかTIFFのライブラリがあるようです。ライセンスを確認の上で試されてみてはいかがでしょうか。
違反を報告
引用返信
■35463 / ResNo.2)  Re[2]: C#でJpeg圧縮のTiffファイルを作成したい
□投稿者/ たろう 一般人(2回)-(2023/06/26(Mon) 16:47:50)
  • アイコンNo35462に返信(Hongliangさんの記事)

    > どうしてもというなら、何らかのサードパーティ製ライブラリを使用するしかないでしょうね。
    > NugetにはいくつかTIFFのライブラリがあるようです。ライセンスを確認の上で試されてみてはいかがでしょうか。

    なるほど、やはり現在の.Netの標準ライブラリでは無理そうですね。
    商用利用もできて、安価もしくは無料で利用できるライブラリがないか探してみます。


違反を報告
引用返信
■35464 / ResNo.3)  Re[3]: C#でJpeg圧縮のTiffファイルを作成したい
□投稿者/ KOZ 一般人(20回)-(2023/06/27(Tue) 09:33:53)
  • アイコン
    2023/06/27(Tue) 09:36:20 編集(投稿者)
    
    ■No35463に返信(たろうさんの記事)
    
    Magick.NET でイケるようです。(ライセンスは Apache License 2.0)
    NuGet から Magick.NET.Core と Magick.NET-Q16-AnyCPU をインストールしてください。
    
    using ImageMagick;
    static class Program
    {
        [STAThread]
        static void Main() {
            using (MagickImage image = new MagickImage(@"z:\temp\test.png")) {
                image.Format = MagickFormat.Tiff;
                image.Settings.Compression = CompressionMethod.JPEG;
                image.Write(@"z:\temp\test.tif");
            }
        }
    }
    

違反を報告
引用返信
■35465 / ResNo.4)  Re[4]: C#でJpeg圧縮のTiffファイルを作成したい
□投稿者/ たろう 一般人(3回)-(2023/06/27(Tue) 15:47:44)
  • アイコンNo35464に返信(KOZさんの記事)
    > Magick.NET でイケるようです。(ライセンスは Apache License 2.0)


    情報ありがとうございます!
    試してみます。


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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35458 / 親記事)  エクセルのみ監視ができない
□投稿者/ たた 一般人(1回)-(2023/06/20(Tue) 20:07:08)
  • アイコン環境/言語:[VB.NET Freamwork4.8.1 VisualStudio2019] 
    分類:[.NET] 

    こちらのサイトのフォルダ、ファイルの変更を監視するを使って特定のエクセルを監視しようとしています。
    しかしながら、watcher.Filter の部分を
    watcher.Filter = "hoge.xlsx"
    としていますがhoge.xlsxが変更されても変更と認識されません。

    試しに watcher.Filter = "" としてみたところ
    changedResult の Name 部分が
    "FBF70100"
    のようになっており、"*.xlsx"の形になっていません。

    hoge.txt で試してみたところ正常にNameは hoge.txt になっていました。
    どのようにすれば hoge.xlsx を監視できるようになるでしょうか。
違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35459 / ResNo.1)  Re[1]: エクセルのみ監視ができない
□投稿者/ Azulean 大御所(538回)-(2023/06/20(Tue) 21:38:03)
  • アイコンNo35458に返信(たたさんの記事)
    > こちらのサイトのフォルダ、ファイルの変更を監視するを使って特定のエクセルを監視しようとしています。

    Excel はおそらく、一時ファイルに書き込んで、正常に終了してから、名前の変更と削除で「上書きのように見せかけている」のが実情だと思います。

    新規作成・名前の変更・削除も拾えるようにして観察してみてください。
違反を報告
引用返信
■35460 / ResNo.2)  Re[2]: エクセルのみ監視ができない
□投稿者/ たた 一般人(2回)-(2023/06/21(Wed) 17:57:19)
  • アイコンいくつか疑問が残る結果になりましたが、とりあえず解決しました。

    備忘録もかねて
    最初に動作確認をした際には "hoge.xlsx" ですべて確保できていた。何故できていたのか不明だが、Azuleanさんの仰るように一時ファイルへの書き込みに対応しておく必要がある。
    "FBF70100" や "hoge.tmp" のように一時ファイルへの書き込み名が統一されていないため対応したプログラム作成を行わなければならない。
    場合によってはファイル名が "~$hoge.xlsx" となっている。
    これらをクリアしたプログラムを作成(スッキリとしませんが)すれば解決する。
解決み!
違反を報告
引用返信

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



■記事リスト / ▲上のスレッド
■35451 / 親記事)  DataGridViewのVirtualModeを有効した場合の実装方法
□投稿者/ 炎の妖精さん 一般人(27回)-(2023/06/12(Mon) 13:30:32)
  • アイコン環境/言語:[Win10/VB.NET/Framework3.5/VS2010] 
    分類:[.NET] 

    お世話になり、いつも助けていただき感謝です。
    此度の件もお付き合いいただければ恐縮です。

    DataGridViewに約50〜1000万件のデータを表示させたいと考えており、
    DataTableに膨大なデータを挿入して、DataGridViewのDataSourceを設定すると"system.outofmemoryexception"のエラーが発生します。
    ネットで調べると仮想モード(VirtualMode)を有効にするとメモリ使用量を抑えることが出来るとの記載があった為、試しに実装しました。
    ●技術レポート「DataGridViewコントロールのVirtualMode(仮想モード)について」
    https://www.softech.co.jp/mm_200506_tr.htm

    今回はデータを表示させたいだけであり、新規行や削除、値の変更は全くありませんので"DataGridView.CellValueNeeded"のみの実装で良いかなと思いましたので
    実装したのですが、状況は変わらずメモリ不足のエラーが発生しました。

    どのように実装すればメモリ消費を抑えるコードが書けるのでしょうか?
    恐縮ですが、何卒よろしくお願いいたします。
違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■35453 / ResNo.1)  Re[1]: DataGridViewのVirtualModeを有効した場合の実装方法
□投稿者/ 魔界の仮面弁士 大御所(1553回)-(2023/06/12(Mon) 16:00:50)
  • アイコン
    No35451に返信(炎の妖精さんさんの記事)
    > DataGridViewに約50〜1000万件のデータを表示させたいと考えており、
    仮に 1 レコード当たり 32 バイト程度のデータであったとしても、
    1000万レコードあったら、300MB 級のデータサイズになりますね。

    これらが Web Service として通信される場合、JSON や XML 化のために
    さらに数倍のデータ量が要求されることになるかもしれません。


    > ネットで調べると仮想モード(VirtualMode)を有効にするとメモリ使用量を抑えることが出来るとの記載があった為、試しに実装しました。
    どのように実装しましたか。
    実際に試せるような実験コードが提示されていないので、
    以下、概要のみの回答となりますが:


    > DataTableに膨大なデータを挿入して、DataGridViewのDataSourceを設定すると"system.outofmemoryexception"のエラーが発生します。
    DataGridView の仮想モードであれ、ListView の仮想モードであれ、
    そもそも 1000万件のデータを画面に表示して、そのすべてをスクロールして
    その 1件 1件をすべて閲覧するという事は非常に稀であり、
    実際に必要なデータはごく一部だけであろうかと思います。

    なので仮想モードにおいては、「現在見えているページ」、「スクロールで要求されたページ」のための
    必要最小限の小さなデータを、必要に応じてサーバーから動的に読み込むという実装をとります。
    Google Map で地図をスクロールするたびに Web 通信が行われる状況に似ていますね。

    一度読み込んだデータでも、別の領域をロードしたらまた忘れられてしまうので、
    以前の情報をとっておきたい場合は、独自のキャッシュ処理を追加します。
    (いずれにしても、大量データを保持し過ぎることが無いような設計が求められます)
    https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/controls/virtual-mode-with-just-in-time-data-loading-in-the-datagrid?view=netframeworkdesktop-4.8
違反を報告
引用返信
■35454 / ResNo.2)  Re[2]: DataGridViewのVirtualModeを有効した場合の実装方法
□投稿者/ 魔界の仮面弁士 大御所(1554回)-(2023/06/12(Mon) 16:11:32)
  • アイコンNo35453に追記(魔界の仮面弁士の記事)
    > (いずれにしても、大量データを保持し過ぎることが無いような設計が求められます)
    > https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/controls/virtual-mode-with-just-in-time-data-loading-in-the-datagrid?view=netframeworkdesktop-4.8


    上記サンプルの場合、表示領域に合わせて、

    Select Top 【rowsPerPage】列1, 列2, 列3, …
    From テーブル名
    Where ソート条件列 NOT IN
    (
     Select Top 【lowerPageBoundary】 ソート条件列
     From テーブル名
     Order By ソート条件列
    )
    Order By ソート条件列

    という SQL Server への問い合わせが行われる想定ですね。
違反を報告
引用返信
■35455 / ResNo.3)  Re[3]: DataGridViewのVirtualModeを有効した場合の実装方法
□投稿者/ 魔界の仮面弁士 大御所(1555回)-(2023/06/12(Mon) 19:00:19)
  • アイコンNo35454に追記(魔界の仮面弁士の記事)
    > 上記サンプルの場合、表示領域に合わせて、
    > という SQL Server への問い合わせが行われる想定ですね。

    SQL Server 2012 以降や Oracle12c以降であれば、
    ORDER BY 句 で OFFSET と FETCH を使うことでページングできます。
    https://sql55.com/query/paging-query-results.php

    ページ指定での分割読取り手法は、お使いのデータベースによって
    使用可能な構文も異なるでしょうし、そこは随時調整してください。
違反を報告
引用返信
■35457 / ResNo.4)  Re[4]: DataGridViewのVirtualModeを有効した場合の実装方法
□投稿者/ 炎の妖精さん 一般人(28回)-(2023/06/13(Tue) 11:18:22)
  • アイコン魔界の仮面弁士様
    いつも助けていただきまして、ありがとうございます。

    > ■No35454に追記(魔界の仮面弁士の記事)
    >> 上記サンプルの場合、表示領域に合わせて、
    >> という SQL Server への問い合わせが行われる想定ですね。
    >
    > SQL Server 2012 以降や Oracle12c以降であれば、
    > ORDER BY 句 で OFFSET と FETCH を使うことでページングできます。
    > https://sql55.com/query/paging-query-results.php
    >
    > ページ指定での分割読取り手法は、お使いのデータベースによって
    > 使用可能な構文も異なるでしょうし、そこは随時調整してください。

    イメージとしましてはECサイトの検索画面のような感じでしょうか?
    1ページで20,30件を表示させ、ページ送りが出来るようなイメージです。

    その手法をとるなら、やりたいことが実現できるかも知れません。
    一度、検討させていただきます。

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

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






Mode/  Pass/


- Child Tree -

2024/11/22(Fri) 16:47:00 に作成されたキャッシュを表示しています。
生のデータを表示する | キャッシュを最新にする