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

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

記事リスト ( )内の数字はレス数
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作成した白黒画像をWordに貼り付けてから「図として保存」(8) | Nomalアセンブリ情報が載らない(1) | Nomal先頭に空白(スペース)があるファイルを読み込んでRichTextBoxへ書き出すとスペースが削除える(6) | Nomalc#で日付型の定義の仕方で質問があります。(2) | NomalExcel Com オブジェクトの増殖(13) | Nomal二次元マップから値の取得(1) | NomalアプリでHDMIへ出す解像度を変えたい(4) | Nomal列車の時間ごとの位置情報を表示したいです。(2) | Nomal画像の中心を基点に回転(4) | NomalDataGridViewのドロップダウンリストの表示と選択後の値を分けたい(1) | NomalVB.NetでVB6.0と同じFontを指定しても同様に印刷されない(9) | 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) | NomalDatagridViewでファンクションキーを止めたい(5) | Nomal表示動作が重くなる(3) | Nomalbitmapを複数スレッドで処理したい(2) | NomalLoadOptionのパラメータの意味(3) | Nomalフォーム背景のみを半透明にしたい(5) | Nomal読み出し元フォームの位置取得方法(2) | Nomalコンストラクターに続く{}の意味(2) | Nomal1行で書くことできますか?(3) | NomalCommandBuilderによって作られるCommandTextの内容(5) | Nomalvb.netで7zの圧縮・解凍をしたい。(2) | NomalC# NASでのプログレスバー有りのコピー(0) | Nomal正規表現で文字の繰り返しパターン(4) | NomalDataViewのFindRowsde(7) | NomalNPOIでのエクセル編集で期待通りに書き込めません(2) | NomalDataGridのSetDataBindingに代わるもの?(3) | NomalFormのサイズ変更で掴める辺を制限したい(2) | NomalVSTOとWebView2の共存って可能?(3) | Nomalビデオ圧縮のコーデック(2) | NomalWindowsMediaPlayerで次のURLを指定しても反映されない。(3) | Nomal"−"を縦書きにしたい(9) | Nomal.NET6.0 のWinFormにWPFのユーザーコントロールを配置したい(4) | NomalDataGridViewの列にコンボボックスを表示する(2) | Nomalデータグリッドビューの特定の列ヘッダの色(2) | NomalVB-Report10→11への移行(4) | Nomal入力値を元に描画させたい(2) | Nomalデフォルトプリンタの用紙向き変更(0) | NomalpictureBoxとlabelの重ね合わせ(2) | NomalASP.net デバッグ時の .js ファイルの変更が反映されない(1) | NomalVBで開いたExcelでのイベントを取得するには(4) | NomalWindowsエクスプローラへのドロップ先フォルダの取得(4) | NomalデザイナでSystemColorsのような色一覧から選択できるようにしたい(0) | NomalVisualStudio2019 以降の検索ダイアログが正常に動作しない(2) | NomalTaskの入れ子の待ち方2(4) | NomalTaskの入れ子の待ち方(5) | NomalUsingの使い方が間違っている?(4) | Nomal//./の意味は?(2) | Nomalバイナリーファイルの結合と分解(2) | Nomal表の最後の行の下にDropできない(1) | NomalCookieの勉強を始めました。(2) | Nomal複数のPageに分かれる場合のスクレ―ピング(6) | NomalDataGridViewのセル結合部分にボタンを表示する方法(2) | NomalTask.Runの使い方(4) | Nomalランダムファイルを高速化させたい(5) | NomalPictureBox のサイズを設定する(2) | NomalProcessクラスMainModuleプロパティでアクセス拒否(3) | NomalLINQでControlsをEnable=Falseに設定(3) | Nomalプロセス間の通信(相互)(2) | NomalC#をVBに変換する方法が分かりません(1) | NomalPictureBoxに動的に画像を表示する(1) | NomalYahooのHPで、検索文字の入力ができない(3) | NomalWebView2のEncodeの問題?(5) | NomalWinFormでChromeをSeleriumで操作しているが、Closeの仕方(2) | NomalWinformでのDataGridView Comboboxのデータ追加削除が出来ない(3) | Nomal印刷部数の固定(1) | Nomalプログラムについて。(2) | Nomal拡張子関連付けのサンプルで削除時 例外発生(1) | Nomalユーザーコントロールをフォームで使用した時のエラー(6) | NomalマルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する(12) | Nomal画像の大きさを取得するには(4) | Nomalファイルがドライブ内で占有する容量(3) | NomalC#FormのXボタンイベントで、e.Cancel が使えない(2) | NomalAxWindowsMediaPlayerでプレイリストの途中から再生するには(2) |



■記事リスト / ▼下のスレッド
■35354 / 親記事)  タイマーの一括処理
□投稿者/ ま〜 一般人(47回)-(2023/01/26(Thu) 16:23:55)
  • アイコン環境/言語:[Vs2022 Basic] 
    分類:[.NET] 

    お世話になります
    初歩的な質問で申し訳ないのですが

    コードの書き方についてです。

    下記の様な記述では構文エラーになってしまいます。同じ様な事が出来る方法ありますか?


    Private InterVaLTimer0 As Timer()

    '---以下FormLoad

    VaLTime = {Timer11, Timer12, Timer13・・・}

違反を報告
引用返信

▽[全レス6件(ResNo.2-6 表示)]
■35356 / ResNo.2)  Re[2]: タイマーの一括処理
□投稿者/ ま〜 一般人(48回)-(2023/01/27(Fri) 13:45:03)
  • アイコン
    > VB2022 なのですよね。単純にスペルミスしているだけでは?
    > InterVaLTimer0 = {Timer11, Timer12, Timer13 }

    すみません。切り取りミスです。誤解を招く事してしまいました。
    スペルミスでは無く実際に赤い波線が。。

    interVaLTimer0 = {Timer1} で {Timer1}に入ってます

250×52
イメージ
1674794703.jpg
/14KB
違反を報告
引用返信
■35357 / ResNo.3)  Re[3]: タイマーの一括処理
□投稿者/ 魔界の仮面弁士 大御所(1528回)-(2023/01/27(Fri) 14:08:41)
  • アイコンNo35356に返信(ま〜さんの記事)
    > スペルミスでは無く実際に赤い波線が。。

    いやいやいや。肝心のエラー内容を示して貰わないことには…。(^_^;)

    エスパー回答するわけにもいかないので、せめて
    そのエラー個所のコードとメッセージぐらいは貼ってください。


    可能性1) BC30311: 型 '(型名)' の値を 'Timer' に変換できません。
    可能性2) BC30451: 'Timer1' は宣言されていません。アクセスできない保護レベルになっています。
    可能性3) BC31429: class '(フォーム名)' に同じ名前のメンバーが多種類存在するため、'Timer1' があいまいです。
違反を報告
引用返信
■35358 / ResNo.4)  Re[4]: タイマーの一括処理
□投稿者/ ま〜 付き人(50回)-(2023/01/27(Fri) 14:18:05)
  • アイコンいつもエスパーアドバイスなのでエスパー以上かと思います

    ビルド出来なかったのエラーは表示されと思ってましたが右タプのエラー一覧にありのを発見しまいました。

    内容は
    「エラー BC30311 型 'Timer' の値を 'Timer' に変換できません。」
    です

    あと気になる所があります。宣言の所にある

    Private interVaLTimer0 As Timer()

    Private Tbox0 As TextBox()と比べて

    Privateの文字色が若干薄い色です

    変数宣言の Dimと同じ色です






違反を報告
引用返信
■35359 / ResNo.5)  Re[5]: タイマーの一括処理
□投稿者/ 魔界の仮面弁士 大御所(1529回)-(2023/01/27(Fri) 14:30:51)
  • アイコンNo35358に返信(ま〜さんの記事)
    > 「エラー BC30311 型 'Timer' の値を 'Timer' に変換できません。」

    Form2.vb の上部に、余計な Imports が追加されているか、
    あるいは、別の Timer が混入している…といった状況を想像。


    可能性1) Timer という名前の Class あるいは Strucutre を自作している

    可能性2) 名前空間の異なる Timer クラスが併用されている
     a: System.Windows.Forms.Timer
     b: System.Threading.Timer
     c: System.Timers.Timer
     d: System.Web.UI.Timer

     ※ WinForms の場合、普通は a: を使います。


    まずは確認のため、Form2 に貼った Timer1 コンポーネントを選択し、
    プロパティ ウィンドウの上部が
     "Timer1 System.Windows.Forms.Timer"
    になっているかどうかを確認してください。

    さらに、フィールド変数の型宣言を
     Private InterVaLTimer0 As Timer()
    から
     Private InterVaLTimer0 As Global.System.Windows.Forms.Timer()
    に変更してみてください。
違反を報告
引用返信
■35360 / ResNo.6)  Re[6]: タイマーの一括処理
□投稿者/ ま〜 付き人(52回)-(2023/01/27(Fri) 17:20:00)
  • アイコンやっぱりエスパー確定です。

    Private InterVaLTimer0 As Global.System.Windows.Forms.Timer()
    でOKでした

    それと
    Imports System.Threadingがありました。これを消してもOKでした。

    何に使ってるのか分からないですが何かのなごりだと思います

    こんなトラブルもあるんですね。

    ありがとうございました

    クローズします。
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35349 / 親記事)  TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい
□投稿者/ 炎の妖精さん 一般人(24回)-(2023/01/25(Wed) 13:50:23)
  • アイコン環境/言語:[Win10(64bit)_VB.NET(Framework 3.5)_MVB2010Express] 
    分類:[.NET] 

    お世話になっております。

    フォームにTreeView(左側)とDataGridView(右側)を配置しており、
    表示させるデータ件数はどちらのコントロールも同じ件数分、表示されています。

    TreeView側のコントロールにて
    マウスホイールやスクロールバーを移動させるとスクロール量分、DataGridViewをスクロールさせたいです。

    同様に
    DataGridView側のコントロールにて
    マウスホイールやスクロールバーを移動させるとスクロール量分、TreeViewもスクロールします。


    コントロールプロパティを確認したのですが、
    TreeViewにはScrollイベント関数が用意されていないようでした。
    どのようにすればいいのでしょうか?
違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■35350 / ResNo.1)  Re[1]: TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい
□投稿者/ 魔界の仮面弁士 大御所(1525回)-(2023/01/25(Wed) 17:59:23)
  • アイコンNo35349に返信(炎の妖精さんさんの記事)
    > コントロールプロパティを確認したのですが、
    > TreeViewにはScrollイベント関数が用意されていないようでした。

    ありません。

    強いて言えば、 No35344 で示したように、
    TreeView の WndProc メソッドを Overrides して捉えるぐらいかと。

    サンプルを書いてみました。
    https://gist.github.com/Benshi/0042cb7b23ca310181bff15c4c3a0042
違反を報告
引用返信
■35351 / ResNo.2)  Re[2]: TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい
□投稿者/ 魔界の仮面弁士 大御所(1526回)-(2023/01/25(Wed) 20:54:52)
  • アイコンNo35350に追記(魔界の仮面弁士の記事)
    > サンプルを書いてみました。
    > https://gist.github.com/Benshi/0042cb7b23ca310181bff15c4c3a0042

    上記実装を追加検証してみましたが、まだまだ不具合がありますね。

    (1) スクロールバーを押しっぱなしにしていると、
     終端に到達した後も Scroll イベントが発生し続けます。

    (2) 折りたたまれたノードを選択した状態で、そのノードを
    上側のスクロール領域外にし、そこで[→]あるいは[Num *]を押して
    ノードを展開した場合に、スクロールされるのにイベントが通知されません。


    各種パターンに追従させるのも面倒ですね…。

    こうなると、TopNode を Timer 監視した方が手っ取り早そうです。
    垂直スクロールしか検出できないですけれどね。

    Public Class Form1
      Public Event TreeViewScroll As EventHandler

      Private Sub Form1_TreeViewScroll(sender As Object, e As EventArgs) Handles Me.TreeViewScroll
        'ListBox1.Items.Insert(0, "Scrolled at " & Now.ToString("HH:mm:ss.fff"))
      End Sub

      Private topNode As TreeNode = Nothing
      Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        If TreeView1.TopNode IsNot Nothing Then
          If topNode IsNot TreeView1.TopNode Then
            topNode = TreeView1.TopNode
            RaiseEvent TreeViewScroll(TreeView1, EventArgs.Empty)
          End If
        End If
      End Sub
      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Timer1.Interval = 150
        Timer1.Start()
      End Sub
    End Class


    あるいは、無理にスクロールを同期させようとするのではなく、
    No35346 の TreeGridView のように、最初から
    「ツリー表示対応のグリッドコントロール」を用いるとか。


    なお、先に例示したものとは別実装のツリー対応グリッドを探したところ、
    Eto.Forms の TreeGridView というのが見つかりました。
    https://github.com/picoe/Eto
    https://www.nuget.org/packages/Eto.Forms
    https://mokake.hatenablog.com/entry/2017/01/31/184421

    ただし Eto.Forms は、.NET Framework 3.5 には対応していないようです。
    一応 バージョン 2.3.0 以下であれば、.NET Framework 4 対応らしいので、
    ギリギリ VB2010 でも動かせるかもしれませんが…。(未確認)
違反を報告
引用返信
■35352 / ResNo.3)  Re[3]: TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい
□投稿者/ 炎の妖精さん 一般人(25回)-(2023/01/26(Thu) 10:37:17)
  • アイコンNo35351に返信(魔界の仮面弁士さんの記事)

    魔界の仮面弁士様
    ご返信、及び動作検証ありがとうございます。

    TreeViewでスクロール実装するのは控えた方がよさそうですね。

    > あるいは、無理にスクロールを同期させようとするのではなく、
    > No35346 の TreeGridView のように、最初から
    > 「ツリー表示対応のグリッドコントロール」を用いるとか。
    そうですね。
    TreeGridViewの採用の検討材料とさせて頂きます。
解決み!
違反を報告
引用返信
■35353 / ResNo.4)  Re[3]: TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい
□投稿者/ 炎の妖精さん 一般人(26回)-(2023/01/26(Thu) 13:57:58)
  • アイコンNo35351に返信(魔界の仮面弁士さんの記事)

    魔界の仮面弁士様
    ご返信、及び動作検証ありがとうございます。

    関係者と協議した結果、そのまま使って頂く事となりました。

    幸い、別の質問(No35341)にさせていただいた件では解決できたため、
    これなら問題ないという意見をもらいました。
    時間がありましたら、TreeGridViewや他コントロールの採用を検討させて頂く所存です。
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35341 / 親記事)  TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 炎の妖精さん 一般人(19回)-(2023/01/24(Tue) 15:07:37)
  • アイコン環境/言語:[Win10(64bit)_VB.NET(Framework 3.5)_VS2010] 
    分類:[.NET] 

    お世話になります。
    本サイト様にはいつも助けられており感謝いたします!
    開発中に困った場面が出てまいりましたのでご助言いただければ幸いです!

    内容ですが、
    左側に"TreeView"、右側に"DataGridView"を表示させており、
    TreeViewの現在位置が変われば、DataGridViewの現在位置も変えたい所存です。

    TreeViewには行という概念が存在しない為、
    どのようにすればいいのか分からない次第です。
994×120 => 250×30
イメージ
TREEVIEW_DATAGRIDVIEW.png
/9KB
違反を報告
引用返信

▽[全レス7件(ResNo.3-7 表示)]
■35344 / ResNo.3)  Re[1]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 魔界の仮面弁士 大御所(1523回)-(2023/01/24(Tue) 16:51:42)
  • アイコンNo35341に返信(炎の妖精さんさんの記事)
    > 左側に"TreeView"、右側に"DataGridView"を表示させており、
    > TreeViewの現在位置が変われば、DataGridViewの現在位置も変えたい所存です。
    アイテムの高さの調整や、スクロールや折り畳みへの追従は
    すでに実装済みであり、あくまでも「現在行」の
    調整さえ行えれば良い、ということでしょうか。

    > TreeViewには行という概念が存在しない為、
    > どのようにすればいいのか分からない次第です。

    TreeNode.EnsureVisible メソッド … 指定ノードを表示させる(展開やスクロールも行われる)
    TreeNode.Bounds プロパティ … ノード位置を示す Recangle を取得する
    TreeView.SelectedNode … 現在選択されているノードを示す
    TreeView.TopNode プロパティ … 表示されている中で一番上のノードを取得・設定する
    TreeView.HitTest メソッド … 指定座標にある要素を調査する
    TreeView.BeforeSelect イベント … ノードが選択される直前に発生する(キャンセル可能)
    TreeView.AfterSelect イベント … ノードが選択された後で発生する
    TreeView.BeforeCollapse/BeforeExpand/AfterCollapse/AfterExpand イベント … ノードが折り畳み/展開される直前/直後にそれぞれ発生する
    TreeView.WndProc メソッド … オーバーライドして WM_VSCROLL/WM_HSCROLL を捉えることで、TreeView のスクロールを検知することができる

    DataGridView.FirstDisplayedScrollingRowIndex プロパティ … 指定行までスクロールさせる
    DataGridView.FirstDisplayedScrollingColumnIndex プロパティ … 指定列までスクロールさせる
    DataGridView.SelectedRows プロパティ … 現在選択されているプロパティを返す
    DataGridView.Scroll イベント … DataGridView のスクロールを検知することができる
    DataGridView.SelectionChanged イベント … 別のセル範囲が選択されると発生する
違反を報告
引用返信
■35345 / ResNo.4)  Re[3]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 炎の妖精さん 一般人(21回)-(2023/01/24(Tue) 16:57:34)
  • アイコン魔界の仮面弁士様
    回答ありがとうございます!

    > 方向性が異なってきますが、この構成のために
    >   「ツリー表示可能な DataGridView」
    > を使うという選択肢は如何でしょうか。
    「ツリー表示可能なDataGridView」が
    VS2010にも取り入れることが出来れば選択肢は有りです!


    > ノードの折りたたみにも対応できるようです。
    > オリジナルコード(C#)のダウンロードはこちら。
    サイトにアクセスしましたが、ページが見つかりませんとエラーが出ました。
    「Oops! That page can’t be found.」


    > 元記事はこちら。
    > [Mark Rideout's Blog] - [Customizing the DataGridView to support expanding/collapsing (ala TreeGridView)]
    此度のようなツリー表示可能なDataGridViewで表現したい場合は
    大変素晴らしいコントロールだと思いました。
    採用するかどうかは検討させていただきます。
違反を報告
引用返信
■35346 / ResNo.5)  Re[4]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 魔界の仮面弁士 大御所(1524回)-(2023/01/24(Tue) 17:07:25)
  • アイコン2023/01/24(Tue) 17:08:16 編集(投稿者)

    No35345に返信(炎の妖精さんさんの記事)
    > VS2010にも取り入れることが出来れば選択肢は有りです!
    Visual Studio 2005 向けの古いソースコードなので、
    移植性に関しては問題ないと思います。


    >>ノードの折りたたみにも対応できるようです。
    >>オリジナルコード(C#)のダウンロードはこちら。
    > サイトにアクセスしましたが、ページが見つかりませんとエラーが出ました。

    あぁ、失礼しました。
    >>元記事はこちら。
    からリンクされている記事を読んでいただくと、その冒頭に
    >>> Original Code:
    >>> https://www.windowsforms.net/blogs/markrideout/treegridview.zip
    とあります。この URL を踏むと、実際には
    下記(OneDrive) の移転先からダウンロードされる仕組みです。

    https://skydrive.live.com/redir?resid=3A5CA8204EC61147!47897&authkey=!AEyPC_P9956qy2E
違反を報告
引用返信
■35347 / ResNo.6)  Re[2]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 炎の妖精さん 一般人(22回)-(2023/01/24(Tue) 17:09:14)
  • アイコン魔界の仮面弁士様
    回答ありがとうございます!

    >> 左側に"TreeView"、右側に"DataGridView"を表示させており、
    >> TreeViewの現在位置が変われば、DataGridViewの現在位置も変えたい所存です。
    > アイテムの高さの調整や、スクロールや折り畳みへの追従は
    > すでに実装済みであり、あくまでも「現在行」の
    > 調整さえ行えれば良い、ということでしょうか。
    実はスクロールについても悩んでおりまして・・・
    TreeViewとDataGridViewのスクロールは同期(シンクロ)させたいのですが、
    TreeViewにはScrollに関するイベント関数が用意されていないようでした。
    TreeViewをマウスホイールでスクロールするとDataGridViewも同方向にスクロールしたいです。
    ※TreeViewとDataGridViewに表示されるデータ件数は同じです


    > TreeNode.EnsureVisible メソッド … 指定ノードを表示させる(展開やスクロールも行われる)
    > TreeNode.Bounds プロパティ … ノード位置を示す Recangle を取得する
    > TreeView.SelectedNode … 現在選択されているノードを示す
    > TreeView.TopNode プロパティ … 表示されている中で一番上のノードを取得・設定する
    > TreeView.HitTest メソッド … 指定座標にある要素を調査する
    > TreeView.BeforeSelect イベント … ノードが選択される直前に発生する(キャンセル可能)
    > TreeView.AfterSelect イベント … ノードが選択された後で発生する
    > TreeView.BeforeCollapse/BeforeExpand/AfterCollapse/AfterExpand イベント … ノードが折り畳み/展開される直前/直後にそれぞれ発生する
    > TreeView.WndProc メソッド … オーバーライドして WM_VSCROLL/WM_HSCROLL を捉えることで、TreeView のスクロールを検知することができる

    > DataGridView.FirstDisplayedScrollingRowIndex プロパティ … 指定行までスクロールさせる
    > DataGridView.FirstDisplayedScrollingColumnIndex プロパティ … 指定列までスクロールさせる
    > DataGridView.SelectedRows プロパティ … 現在選択されているプロパティを返す
    > DataGridView.Scroll イベント … DataGridView のスクロールを検知することができる
    > DataGridView.SelectionChanged イベント … 別のセル範囲が選択されると発生する
    各コントロールのイベントの説明、ありがとうございます!
    やりたいこと、出来そうなことを整理して
    実装できるか検証したいと思います。
違反を報告
引用返信
■35348 / ResNo.7)  Re[3]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 炎の妖精さん 一般人(23回)-(2023/01/25(Wed) 13:43:18)
  • アイコン魔界の仮面弁士様

    なんとか現在位置を取得することが出来ました。

    スクロールの同期(シンクロ)については新たに質問します。
    ありがとうございました。
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35316 / 親記事)  PictureBoxの画像を連続保存
□投稿者/ ま〜 一般人(38回)-(2023/01/10(Tue) 19:41:27)
  • アイコン環境/言語:[VS2022 VB] 
    分類:[.NET] 

    こんばんわ
    また困った事がありましてお教え願います
    15個のPictureBoxの画像をグルグル回してファイルに落としたいのですが
    どうも上手くできないのです。
    ファイル保存の方は問題なく出来ると思うのですが
    PictureBoxからイメージを取ってきて受け渡しをどう考えれば宜しいでしょうか?
    宜しくお願いしまうす

違反を報告
引用返信

▽[全レス11件(ResNo.7-11 表示)]
■35323 / ResNo.7)  Re[7]: 複数のPictureBox画像を複数のファイルへ保存したい
□投稿者/ ま〜 一般人(42回)-(2023/01/12(Thu) 14:13:11)
  • アイコンいつもありがとうございます
    フィールド変数の件は棚ぼたです。出来ないと思ってました。助かります。

    本題ですが先のコードでわDisposeした方が良いのか程度で書いてました
    Form LoadでDisposeしてますがボタンクリックでTextBoxから画像を生成して各PictureBoxに書いてますので問題ないと解釈していました
    今二つの問題に当たっています。スレッドを分けなかったのは同じ要因かなと思ってです。

    流れ RichTextBoxへ文字入力 ⇒生成⇒ PictureBox16 ⇒サイズを変えてコピー⇒ 各PictureBox ⇒ すべてのPictureBoxの画像をファイル保存


    ――――――――ボタン@――――――――ー
    Dim bmp = CreateBitmapFromControl(Rbox(PageNo))
    If PictureBox16.Image IsNot Nothing Then
      PictureBox16.Image.Dispose()
    End If

    ‘P PageNo←どのPictureBoxを操作するか
    PictureBox16.Image = bmp ← 自動生成されたイメージが入っている
    ‘ピクチャ1−15へ各個転送
    Dim Picture() As PictureBox = {PictureBox1, PictureBox2, PictureBox3, ・・・・・PictureBox15} 
    Picture(PageNo).Image = PictureBox16.Image

    これは同じ画像を各PictureBoxへ書いたと同じ扱いになりますか?一旦PictureBox16経由で各PictureBoxへ作画されています
    これがやっては駄目な事でしょうか?

    最後の書いたPictureBoxをBで保存する事は出来ました。
    それ以外のPictureBox以外でBのコードを実行するエラーとなる

    ―――――――Bエラーになる箇所――――――――――
    Picture(PageNo).Image.Save(PicturePath"MojiGAZou1.bmp",System.Drawing.Imaging.ImageFormat.Bmp)


    Imageは使わない方がよいのでしょうか?

    ―――――――――ボタンA――――――――――――
    試してみました

    Dim Picture() As PictureBox = {PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5}
    For i As Byte = 0 To 4
    Picture(i).Size = New Size(Picture(i).Size.Width, 320)
    Picture(i).Size = New Size(Picture(i).Size.Height, 160)
    Picture(i).SizeMode = PictureBoxSizeMode.Zoom
    Picture(i).Image = Image.FromFile(PicturePath + "MojiGAZou" & CStr(i + 1) & ".bmp")
    Next

    Me.PictureBox1.Image.Save(PicturePath + "MojiGAZou1.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    Me.PictureBox2.Image.Save(PicturePath + "MojiGAZou2.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    Me.PictureBox3.Image.Save(PicturePath + "MojiGAZou3.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    Me.PictureBox4.Image.Save(PicturePath + "MojiGAZou4.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    Me.PictureBox5.Image.Save(PicturePath + "MojiGAZou5.bmp", System.Drawing.Imaging.ImageFormat.Bmp)

    これもPictureBox1.のSaveの所でエラーとなります。こんな事は出来ない?

    以下はエラーの内容です

    System.Runtime.InteropServices.ExternalException
    HResult=0x80004005
    Message=GDI+ で汎用エラーが発生しました。
    Source=System.Drawing
    スタック トレース:
    at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
    at System.Drawing.Image.Save(String filename, ImageFormat format)
    at Test.文字編集Form.Button18_Click(Object sender, EventArgs e) in C:\Users\userMM\OneDrive\Test\文字編集Form.vb:line 232
    at System.Windows.Forms.Control.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.ButtonBase.WndProc(Message& m)
    at System.Windows.Forms.Button.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    at Test.My.MyApplication.Main(String[] Args) in :line 83


    Disposeする必要は無いので何か良い方法はありますか?

    あと

    >No35282 の KOZ さんの実装パターンに相当しますね。
    >
    > PictureBox1.Image?.Dispose() '処分
    > PictureBox1.Image = Nothing '解放

    とありますがこれはどの様な意味ですか?

    以上、長々とすみません

違反を報告
引用返信
■35324 / ResNo.8)  Re[8]: 複数のPictureBox画像を複数のファイルへ保存したい
□投稿者/ 魔界の仮面弁士 大御所(1516回)-(2023/01/12(Thu) 16:00:58)
  • アイコンNo35323に返信(ま〜さんの記事)
    > 本題ですが先のコードでわDisposeした方が良いのか程度で書いてました
    でわ→では


    > If PictureBox16.Image IsNot Nothing Then
    >   PictureBox16.Image.Dispose()
    > End If
    上記は『PictureBox16.Image?.Dispose()』の一行で書けます。
    https://learn.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/null-conditional-operators

    そして、Disposed 状態のオブジェクトを参照し続けた状態にするのは問題があるため、
    PictureBox16.Image には直ちに、Nothing (あるいは別の画像)を代入しなおさねばなりません。

    ただし本来は、別の画像(あるいはNothing)を割り当ててから元の画像を Dispose した方が望ましいです。


    > PictureBox16.Image = bmp ← 自動生成されたイメージが入っている
    > Picture(PageNo).Image = PictureBox16.Image
    > これは同じ画像を各PictureBoxへ書いたと同じ扱いになりますか?

    一つの画像を複数の PictureBox から参照している状態になりますね。


    つまり、一枚の絵画を複数人で同時に鑑賞している状態に相当します。
    ということは、その絵画を破損させれば、他の閲覧者も破損した絵画を見ることになってしまいます。
    もしも閲覧者A が、自身が見ている絵画を破棄したとすれば、
    それは閲覧者B や C が見ている絵画も捨てられたことを意味します。

    Picture(0).Image を Dispose() した場合、
    Picture(1).Image も破棄されるので、ArgumentException 等になってしまう所以です。


    しかしあらかじめ、一枚の元絵を人数分複製しておき、それを閲覧させるようにすれば、
    元絵を破損させたとしても、各閲覧者の見ている画像が見えなくなることはありません。

    これはすなわち、
     Picture(PageNo).Image = DirectCast(PictureBox16.Image?.Clone(), Image)
    のようにしておく、ということです。それぞれの画像は元絵の複製にすぎないわけですから、
    Picture(0).Image を Dispose() したとしても、
    Picture(1).Image や PictureBox16.Image には影響がありません。


    > 一旦PictureBox16経由で各PictureBoxへ作画されています
    > これがやっては駄目な事でしょうか?
    何を経由させても構いません。
    変数であろうと PictureBox16.Image であろうと大丈夫です。

    問題になっているのは、PictureBox16 を経由させたことではなく、
    「使用中のオブジェクトを Dispose したこと」です。


    Picture(0) がその画像を使わなくなったとしても、他の PictureBox が
    同じインスタンスを使用しているのなら、Dispose してはいけません。
    捨てるなら、「誰も使わなくなってから」にしましょう。



    > ―――――――Bエラーになる箇所――――――――――
    > Picture(PageNo).Image.Save(PicturePath"MojiGAZou1.bmp",System.Drawing.Imaging.ImageFormat.Bmp)
    そもそも文法違反になるでしょうね。(^_^;)


    > Imageは使わない方がよいのでしょうか?
    いいえ。「誰かが使用している最中の Image を勝手に Dispose してはいけない」というだけです。

    「使い終わった Image は Dispose しなければならない」ルールであるのは確かですが、
    「私が使い終わったので、他の人が使っていたとしても勝手に捨ててしまおう」はルール違反です。


    > Dim Picture() As PictureBox = {PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5}
    > For i As Byte = 0 To 4
    配列のインデックスは常に Integer 型です。Byte 型ではありません。

    Byte/SByte/Short/UShort は Integer 型への暗黙変換が可能なのでエラーにはなりませんが、
    わざわざ Byte 型を経由させると、無駄な変換処理が増えることになってしまいます。

    そのため普通は As Byte とはせず、「For i = 0 To 4」もしくは「For i As Integer = 0 To 4」と書きます。


    > Picture(i).Size = New Size(Picture(i).Size.Width, 320)
    > Picture(i).Size = New Size(Picture(i).Size.Height, 160)

    これって、
     Picture(i).Width = Picture(i).Size.Width
     Picture(i).Height = 320
     Picture(i).Width = Picture(i).Size.Height
     Picture(i).Height = 160
    に相当する処理ですよね。何故こんなことを…?

    幅と高さを指定するだけならば、
     Picture(i).Size = New Size(320, 160)
    では駄目なのでしょうか。SizeMode 指定のために必要だったとか?

    > Picture(i).Image = Image.FromFile(PicturePath + "MojiGAZou" & CStr(i + 1) & ".bmp")
    前 1 つが「+ 演算子」で、
    後 2 つが「& 演算子」なのは何故ですか?


    > Me.PictureBox1.Image.Save(PicturePath + "MojiGAZou1.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    > Me.PictureBox2.Image.Save(PicturePath + "MojiGAZou2.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    > Me.PictureBox3.Image.Save(PicturePath + "MojiGAZou3.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    > Me.PictureBox4.Image.Save(PicturePath + "MojiGAZou4.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    > Me.PictureBox5.Image.Save(PicturePath + "MojiGAZou5.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    > これもPictureBox1.のSaveの所でエラーとなります。こんな事は出来ない?

    「Image が Dispose されていない」かつ「指定のパスに書き込みが可能」な状態にしておけば
    上記のコードでもエラーにはならないと思いますよ。

    仮に Dispose していなかったとしても、その画像が Image.FromFile で読み込まれていて、
    かつ、そのインスタンスがまだ破棄されていなかったとしたら、ファイルがロックされたままになるので
    また別のエラーを誘発する可能性がありますね。


    >> PictureBox1.Image?.Dispose() '処分
    >> PictureBox1.Image = Nothing '解放
    > とありますがこれはどの様な意味ですか?

    If PictureBox1.Image IsNot Nothing Then
     PictureBox1.Image.Dispose() '処分
    End If
    PictureBox1.Image = Nothing '解放

    という意味です。

    KOZ さんの書かれた No35282 の場合は、
     Dim bmp = CreateBitmapFromControl(RichTextBox1)
     If PictureBox1.Image IsNot Nothing Then
       PictureBox1.Image.Dispose()
     End If
     PictureBox1.Image = bmp
    ですね。

    いずれも、「bmp (または Nothing)を参照させる前に、以前の画像があれば Dispose する」という処理です。
    以前の画像を「処分してから解放」の順序になっているので、本当は「解放してから処分」の方が良いのですが。

    上記 No35282 のコードを「解放してから処分」にするのであれば
     Using PictureBox1.Image
      PictureBox1.Image = CreateBitmapFromControl(RichTextBox1)
     End Using
    または
     Dim oldImage = PictureBox1.Image
     PictureBox1.Image = CreateBitmapFromControl(RichTextBox1)
     oldImage?.Dispose()
    と書きます。自分は後者の方が好みですが、 No35282 のままでも問題はありません。
違反を報告
引用返信
■35330 / ResNo.9)  Re[9]: 複数のPictureBox画像を複数のファイルへ保存したい
□投稿者/ ま〜 一般人(44回)-(2023/01/16(Mon) 14:20:51)
  • アイコンいつもありがとうございます
    貴重なお時間割いて頂きご指導ありがとうございます
    今回も知らない事が多く大変勉強になりました
    最終目標はテキストから生成した画像を保存なので道のり長いですが宜しくお願いします

    テスト的にやって見た所。下記の2行目でエラーとなります。まさに沼です

      Me.PictureBox1.Image = Image.FromFile(PicturePath & "MojiGAZou1.bmp")
      Me.PictureBox1.Image.Save(PicturePath & "MojiGAZou1.bmp", System.Drawing.Imaging.ImageFormat.Bmp)

    2行目をコメントアウトして確認した所、表示はされてるのでファイルとかの問題ではなさそうです。。
    何か基本的なのが抜けてる気がしてきました。読み込んだだけでは保存出来ないのでしょうか?


    ーーーーーーーーーエラーの内容-----
    System.Runtime.InteropServices.ExternalException
    HResult=0x80004005
    Message=GDI+ で汎用エラーが発生しました。
    Source=System.Drawing

    余談ですが「は」「わ」の件ですが私も違和感あったのですが最近の若者からのメールが
    「わ」使う子が多くいつの間にか私も影響受けてるみたいです。(笑)

    あと+と&は修正途中でした。。意味はありません
違反を報告
引用返信
■35331 / ResNo.10)  Re[10]: 複数のPictureBox画像を複数のファイルへ保存したい
□投稿者/ 魔界の仮面弁士 大御所(1519回)-(2023/01/16(Mon) 16:14:25)
  • アイコン2023/01/16(Mon) 16:30:46 編集(投稿者)

    No35330に返信(ま〜さんの記事)
    > テスト的にやって見た所。下記の2行目でエラーとなります。まさに沼です
    >   Me.PictureBox1.Image = Image.FromFile(PicturePath & "MojiGAZou1.bmp")
    >   Me.PictureBox1.Image.Save(PicturePath & "MojiGAZou1.bmp", System.Drawing.Imaging.ImageFormat.Bmp)

    先の No35322 で紹介した通り、 Image.FromFile がファイルをロックしているためです。


    '駄目な例1
    PictureBox1.Image = Image.FromFile(bmpFile)
    'System.Runtime.InteropServices.ExternalException: 'GDI+ で汎用エラーが発生しました。'
    PictureBox1.Image.Save(bmpFile, System.Drawing.Imaging.ImageFormat.Bmp)


    '駄目な例2
    PictureBox1.Image = Image.FromFile(bmpFile)
    PictureBox1.Image.Dipose()
    'System.ArgumentException: '使用されたパラメーターが有効ではありません。'
    PictureBox1.Image.Save(bmpFile, System.Drawing.Imaging.ImageFormat.Bmp)


    '★修正例★
    PictureBox1.Image = Image.FromStream(New MemoryStream(File.ReadAllBytes(bmpFile)))
    PictureBox1.Image.Save(bmpFile, System.Drawing.Imaging.ImageFormat.Bmp)


    '駄目な修正例1
    PictureBox1.Image = Image.FromStream(New MemoryStream(File.ReadAllBytes(bmpFile)))
    PictureBox1.Image.Dipose()
    'System.ArgumentException: '使用されたパラメーターが有効ではありません。'
    PictureBox1.Image.Save(bmpFile, System.Drawing.Imaging.ImageFormat.Bmp)


    '駄目な修正例2
    Using stm As New FileStream(bmpFile, FileMode.Open, FileAccess.Read)
     PictureBox1.Image = Image.FromStream(stm)
    End Using
    PictureBox1.Image.Save(bmpFile, System.Drawing.Imaging.ImageFormat.Bmp)


    '駄目な修正例3
    Using stm As New MemoryStream(File.ReadAllBytes(bmpFile))
     PictureBox1.Image = Image.FromStream(stm)
    End Using
    PictureBox1.Image.Save(bmpFile, System.Drawing.Imaging.ImageFormat.Bmp)



    追記:こういう手もあるかな。

    Using img = Image.FromFile(pngFile)
     PictureBox1.Image = New Bitmap(img)
    End Using
    PictureBox1.Image.Save(pngFile, System.Drawing.Imaging.ImageFormat.Bmp)

    上記は、 No8405 のスレッドの "中 博俊" さん( No8447 )の案です。
    >>> New Bitmap(bmp)
    >>> で、新しいBitmapにコピーされますよ。
    >>>
    >>> ただし全てがコピーされるわけじゃなくってDPIが保持されないとか、現在のページだけ(マルチページな画像の場合)とかやや違いはありますが。
違反を報告
引用返信
■35340 / ResNo.11)  Re[11]: 複数のPictureBox画像を複数のファイルへ保存したい
□投稿者/ ま〜 一般人(46回)-(2023/01/20(Fri) 12:55:32)
  • アイコン沢山のアドバイスありがとうございます
    またまた、勉強になりました。

    少しハマりながらもなんとか目的の事が出来ました。

    重ねてありがとうございます

    クローズします。

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

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



■記事リスト / ▲上のスレッド
■34964 / 親記事)  DataGridViewの特定セルにボタンを配置する方法
□投稿者/ り 一般人(4回)-(2021/11/17(Wed) 16:05:58)
  • アイコン環境/言語:[C#] 
    分類:[.NET] 

    画像のような表を作成したいのですが、
    特定のセルにのみボタンを配置することは可能でしょうか。
548×394 => 250×179
イメージ
IMAGE.png
/6KB
違反を報告
引用返信

▽[全レス5件(ResNo.1-5 表示)]
■34965 / ResNo.1)  Re[1]: DataGridViewの特定セルにボタンを配置する方法
□投稿者/ 魔界の仮面弁士 大御所(1411回)-(2021/11/17(Wed) 18:12:54)
  • アイコンNo34964に返信(りさんの記事)
    > 画像のような表を作成したいのですが、
    > 特定のセルにのみボタンを配置することは可能でしょうか。

    dataGridView1[0, 0] = new DataGridViewButtonCell { UseColumnTextForButtonValue = true };
違反を報告
引用返信
■34966 / ResNo.2)  Re[2]: DataGridViewの特定セルにボタンを配置する方法
□投稿者/ り 一般人(5回)-(2021/11/19(Fri) 08:52:28)
  • アイコンNo34965に返信(魔界の仮面弁士さんの記事)
    > ■No34964に返信(りさんの記事)
    >>画像のような表を作成したいのですが、
    >>特定のセルにのみボタンを配置することは可能でしょうか。
    >
    > dataGridView1[0, 0] = new DataGridViewButtonCell { UseColumnTextForButtonValue = true };

    返信遅くなりました。
    早急に回答していただきありがとうございます!
    しかし、私の理解不足だと思うのですが、これだけでは実現できませんでした。
    他に記述すべき内容がありましたら、教えていただきたいです...
違反を報告
引用返信
■34974 / ResNo.3)  Re[3]: DataGridViewの特定セルにボタンを配置する方法
□投稿者/ り 一般人(6回)-(2021/12/06(Mon) 11:35:47)
  • アイコン試行錯誤したらできました。
解決み!
違反を報告
引用返信
■35338 / ResNo.4)  Re[4]: DataGridViewの特定セルにボタンを配置する方法
□投稿者/ なかい 一般人(1回)-(2023/01/18(Wed) 20:47:46)
  • アイコンNo34974に返信(りさんの記事)
    > 試行錯誤したらできました。

    お世話様です。
    どのようにして実現できましたのでしょうか?
    同じようなことで試行錯誤しています。
    教えていただけたら、ありがたいです。

違反を報告
引用返信
■35339 / ResNo.5)  Re[5]: DataGridViewの特定セルにボタンを配置する方法
□投稿者/ 魔界の仮面弁士 大御所(1521回)-(2023/01/19(Thu) 08:56:36)
  • アイコンNo35338に返信(なかいさんの記事)
    > どのようにして実現できましたのでしょうか?
    > 同じようなことで試行錯誤しています。
    > 教えていただけたら、ありがたいです。

    他者が解決済みとしているスレッドを未解決に戻して質問するのではなく、
    新たなスレッドを立ち上げたうえで、そちらで質問していただけますでしょうか。
    (投稿時に、このスレッドの URL もしくは投稿 No を貼ってもらえると助かります)

    なお、質問する際には
     ・言語指定(VB なのか C# なのか)
     ・Visual Studio のバージョン
     ・現状、どこで問題が起きているのか、あるいは No34965 のどこが分からないか
    などを明記していただけますようお願いします。

    申し訳ありませんが、こちらのスレッドは解決済みに戻させていただきます。
解決み!
違反を報告
引用返信

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






Mode/  Pass/


- Child Tree -

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