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

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

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



■記事リスト / ▼下のスレッド
■35185 / 親記事)  VB.NetでVB6.0と同じFontを指定しても同様に印刷されない
□投稿者/ ゆりりん 一般人(1回)-(2022/10/21(Fri) 11:45:23)
  • アイコン環境/言語:[環境(Windows10 64bit)、使用言語(VB.net2017)、.NET Framework 4.6.1 ] 
    分類:[.NET] 

    いつも参照させていただいています。

    現在、VB6.0で書かれた印刷プログラムをVB.Netに移行しています。
    その中で、VB6.0と全く同じ座標とFont種類・サイズを指定しても、
    VB.Netで印刷すると、少し右にずれてしまうし、Fontのサイズが微妙に違ってしまいます。
    Fontの高さは同じようなのですが、文字と文字の隙間が微妙に違うようで、長い文字列を印刷すると、印刷された文字の長さがVB.Netの方が長くなってしまうのです。
    座標系はどちらも、ミリメートルを指定しています。
    VB.Netで印刷された文字列の前に空白が付くことは、下記のサイトを参照して分かったので、ずれる分を引いた座標を指定したら、右にずれる件は解決したのですが、同じFontを指定しても違ってしまう件が解決できません。
    同じプリンタとプリンタドライバを使用しているのに、どうしてVB6.0とVB.Netで違ってしまうのか、まったくわかりません。

    ・使用しているプリンタ ラベルプリンタ SATO CL4NX-J 609dpi
    ・プリンタ解像度 609dpi 24dot/mm

    ・参考にしたサイト
    VB.netで文字を正確な位置に描く。
    https://penguinlab.jp/blog/post/117

    ※VB6.0のサンプル

    Printer.ScaleMode = 6
    Printer.FontName = "MS ゴシック"
    Printer.FontSize = 9
    Printer.CurrentX = 12.5
    Printer.CurrentY = 30.7
    Printer.Print "IN-OUT<AB>CD EFG-HIJK-LMN A<10>"

    ※VB.Netのサンプル

    e.Graphics.PageUnit = GraphicsUnit.Millimeter
    Dim f As New Font("MS ゴシック", 9, FontStyle.Regular)
    e.Graphics.DrawString("IN-OUT<AB>CD EFG-HIJK-LMN A<10>", f, Brushes.Black, 12.5, 30.7)

    こんな感じです。


    どなたかわかる方、どうかアドバイスをお願いいたします。

違反を報告
引用返信

▽[全レス9件(ResNo.5-9 表示)]
■35202 / ResNo.5)  Re[5]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない
□投稿者/ 魔界の仮面弁士 大御所(1467回)-(2022/10/26(Wed) 18:29:47)
  • アイコンNo35200に返信(ゆりりんさんの記事)
    > 想定していたよりかなり小さく印刷されてしまい、
    物理単位と論理単位の違いでは無いでしょうか。

    恐らく、最初の回答で述べた「TextRenderer.DrawText」を使った場合と
    同じぐらいのサイズで描画されていませんか?

    GDI+ 側の PageUnit プロパティを操作しても、
    GDI 側のデバイスコンテキストには影響を与えないと思います。


    > 座標は合っているようなのですが、想定していたよりかなり小さく印刷されてしまい
    単位系が未設定の場合、初期値として
    GDI+ 側(PageUnit プロパティ)は Display(1) を返し、
    GDI 側(GetMapMode API)は MM_TEXT(1) を返すようです。

    Sub SetFont でフォントを生成する際に、
    MM_TEXT から MM_LOMETRIC あるいは MM_HIMETRIC で
    生成するようにしてみては如何でしょうか。


    > Private Sub pd_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    >  Dim mFont As IntPtr
    ここで宣言されたローカル変数の mFont と

    > Private Sub SetFont(ByVal control As IntPtr, ByVal fontFamily As String, ByVal fontSize As Integer)
    >  mFont = CreateFont(fontSize * -1, 0, 0, 0, 400, 0, 0, 0, 1, 0, 0, 0, 0, fontFamily)
    ここで利用されているフィールド変数の mFont は
    それぞれ別の変数ですが、大丈夫ですか?
違反を報告
引用返信
■35207 / ResNo.6)  Re[6]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない
□投稿者/ ゆりりん 一般人(4回)-(2022/10/28(Fri) 10:38:17)
  • アイコンいつもありがとうございます。

    > 物理単位と論理単位の違いでは無いでしょうか。
    >
    > GDI+ 側の PageUnit プロパティを操作しても、
    > GDI 側のデバイスコンテキストには影響を与えないと思います。

     そういうことだったのですね。

    > Sub SetFont でフォントを生成する際に、
    > MM_TEXT から MM_LOMETRIC あるいは MM_HIMETRIC で
    > 生成するようにしてみては如何でしょうか。

     早速、やってみようと思います。
     
    >> Dim mFont As IntPtr
    > ここで宣言されたローカル変数の mFont と
    >
    >> mFont = CreateFont(fontSize * -1, 0, 0, 0, 400, 0, 0, 0, 1, 0, 0, 0, 0, fontFamily)
    > ここで利用されているフィールド変数の mFont は
    > それぞれ別の変数ですが、大丈夫ですか?

     すみません。
     ここに載せる時に、間違えました。
     実際には、論理フォントの作成の後に入っています。
     お気づきいただき、ありがとうございました。
違反を報告
引用返信
■35212 / ResNo.7)  Re[6]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない
□投稿者/ ゆりりん 一般人(5回)-(2022/10/28(Fri) 16:49:02)
  • アイコン> Sub SetFont でフォントを生成する際に、
    > MM_TEXT から MM_LOMETRIC あるいは MM_HIMETRIC で
    > 生成するようにしてみては如何でしょうか。


    <System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")>
    Friend Shared Function SetMapMode(ByVal hdc As Integer, ByVal fnMapMode As Integer) As Integer
    End Function

     を追加しまして、

    Private Sub SetFont(ByVal control As IntPtr, ByVal fontFamily As String, ByVal fontSize As Integer)

    Call SetMapMode(control, 2) 'MM_LOMETRIC
    mFont = CreateFont(fontSize * -1, 0, 0, 0, 400, 0, 0, 0, 1, 0, 0, 0, 0, fontFamily)
    mFontOld = SelectObject(control, mFont)

    End Sub

     このように書いてみたのですが、
     何も印刷されなくなってしまいました。
     SetMapMode の使い方が、間違っているのでしょうか。

     度々申し訳ございません。
     ご教授いただければと思います。
     どうぞよろしくお願いいたします。


違反を報告
引用返信
■35214 / ResNo.8)  Re[7]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない
□投稿者/ 魔界の仮面弁士 大御所(1473回)-(2022/10/28(Fri) 21:29:20)
  • アイコン
    No35212に返信(ゆりりんさんの記事)
    > 何も印刷されなくなってしまいました。
    
    『フォントサイズ』の指定、および、『描画位置の座標』は正しいですか?
    
    MM_TEXT から MM_LOMETRIC に変更したのであれば、フォントサイズだけでは無く
    描画座標も MM_LOMETRIC 単位系で計算しなおす必要があります。
    
    
    描画位置を変更したくない場合は、GetMapMode と SetMapMode をペアで使うようにして、
    フォント作成後、描画時に座標系を元に戻してみてください。先の私の回答では、フォントを
    「MM_LOMETRIC あるいは MM_HIMETRIC で生成する」とは書きましたが、
    「MM_LOMETRIC あるいは MM_HIMETRIC で描画する」とは書いていません。
    
    
    MapMode は 1〜8 の 8 種類あります。指定するモードによっては、
    単位だけでなく軸の向きも変化していることに注意してください。
    
     (A) X 座標が右に、Y 座標が上に向かって増加していくもの
     (B) X 座標が右に、Y 座標が下に向かって増加していくもの
     (C) SetWindowExtEx() / SetViewportExtEx() で単位、向き、スケーリングを指定するもの
     http://www.kumei.ne.jp/c_lang/sdk/sdk_55.htm
     http://yamatyuu.net/computer/program/sdk/gdi/mapmode/index.html
    
    ---
    
    (A) 右向き、上向きな MapMode
     1 … MM_TEXT。1 デバイスピクセル単位の物理座標系。
     6 … MM_TWIPS。0.05ポイント単位(1/1440インチ単位)の論理座標系。
    
    (B) 右向き、下向きな MapMode
     2 … MM_LOMETRIC。0.1 ミリ単位の論理座標系。
     3 … MM_HIMETRIC。0.01 ミリ単位の論理座標系。
     4 … MM_LOENGLISH。0.01 インチ単位の論理座標系。
     5 … MM_HIENGLISH。0.001 インチ単位の論理座標系。
    
    (C) 単位、向き、スケーリングを任意に指定できる MapMode
     7 … MM_ISOTROPIC。異方性ユーザー定義単位系。任意の単位、向き、スケーリングを持つ。
     8 … MM_ANISOTROPIC。等方性ユーザー定義単位系。X 軸と Y 軸の 1 単位が等しい。

違反を報告
引用返信
■35215 / ResNo.9)  Re[8]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない
□投稿者/ ゆりりん 一般人(6回)-(2022/11/02(Wed) 11:23:32)
  • アイコン> 描画位置を変更したくない場合は、GetMapMode と SetMapMode をペアで使うようにして、
    > フォント作成後、描画時に座標系を元に戻してみてください。先の私の回答では、フォントを
    > 「MM_LOMETRIC あるいは MM_HIMETRIC で生成する」とは書きましたが、
    > 「MM_LOMETRIC あるいは MM_HIMETRIC で描画する」とは書いていません。
    >
    そういうことだったのですね。
    よくわかっていませんでした。

    『描画位置の座標』はピクセルで計算していたので、
    MM_TEXTの指定にしたら、きちんと印刷されるようになりました。

    今までどうもありがとうございました。


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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35177 / 親記事)  Labelで文字単位の背景色
□投稿者/ ま〜 一般人(9回)-(2022/10/19(Wed) 13:09:57)
  • アイコン環境/言語:[basic] 
    分類:[.NET] 

    こんいちは
    Labelで文字単位の反転文字をしたいのですが(特定の文字だけ協調したい)
    こんな事はRichTextで無いと無理なのでしょうか?

違反を報告
引用返信

▽[全レス7件(ResNo.3-7 表示)]
■35181 / ResNo.3)  Re[2]: Labelで文字単位の背景色
□投稿者/ 魔界の仮面弁士 大御所(1463回)-(2022/10/19(Wed) 17:10:24)
  • アイコンNo35180に追記(魔界の仮面弁士の記事)
    > TextBox や RichTextBox で代用するとかですかね。
    > ただしこの場合、キーボードやマウス操作で選択状態を変更できてしまいます。
    > かといって Enabled = False だと、淡色表示になってしまうが悩ましい所。

    Enabled は True のままにしておいて、
    Enter イベントか GotFocus イベントで、
    非アクティブにしてしまえば、何とかなるかな?

    Private Sub TextBox1_GotFocus(sender As Object, e As EventArgs) Handles TextBox1.GotFocus
      ActiveControl = Nothing
    End Sub


    本当は、そもそもフォーカスを受け取らないようにするか、
    あるいはせめて、前回フォーカスのあったコントロールに戻す方が
    望ましいのですけれど…ひとまず手抜き実装ということで。
違反を報告
引用返信
■35182 / ResNo.4)  Re[3]: Labelで文字単位の背景色
□投稿者/ KOZ 一般人(4回)-(2022/10/20(Thu) 05:37:05)
  • アイコン
    No35181に返信(魔界の仮面弁士さんの記事)
    > 本当は、そもそもフォーカスを受け取らないようにするか、
    > あるいはせめて、前回フォーカスのあったコントロールに戻す方が
    > 望ましいのですけれど…ひとまず手抜き実装ということで。
    
    RichTextBox を非表示にして親に描画するとか。
    
    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            RichTextBox1.Visible = False
            RichTextBox1.Text = "こんにちは!"
            RichTextBox1.SelectionStart = 5
            RichTextBox1.SelectionLength = 1
            RichTextBox1.SelectionColor = Color.White
            RichTextBox1.SelectionBackColor = Color.Red
        End Sub
    
        Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
            Using bmp As New Bitmap(RichTextBox1.Width, RichTextBox1.Height)
                RichTextBox1.DrawToBitmap(bmp, New Rectangle(New Point(0, 0), RichTextBox1.Size))
                e.Graphics.DrawImage(bmp, RichTextBox1.Location)
            End Using
        End Sub
    
    End Class
    

違反を報告
引用返信
■35183 / ResNo.5)  Re[4]: Labelで文字単位の背景色
□投稿者/ KOZ 一般人(5回)-(2022/10/20(Thu) 11:42:04)
  • アイコンNo35182に返信(KOZの記事)
    > RichTextBox を非表示にして親に描画するとか。

    https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/RichTextBox.cs,1804

    RichTextBox の DrawToBitmap は機能しなかったのを思い出しました。
    このコードは .NET Framework 4.7 以上だと動きますが 4.6.2 以下だと動きません。
    ま〜さんがお使いの環境によっては、この手は使えません。失礼しました。

違反を報告
引用返信
■35184 / ResNo.6)  Re[5]: Labelで文字単位の背景色
□投稿者/ KOZ 一般人(6回)-(2022/10/21(Fri) 08:15:12)
  • アイコンNo35183に返信(KOZさんの記事)
    > このコードは .NET Framework 4.7 以上だと動きますが 4.6.2 以下だと動きません。
    > ま〜さんがお使いの環境によっては、この手は使えません。失礼しました。

    .NET Framework 4.0 以降であれば、app.config をいじれば大丈夫のようです。

    https://lets-csharp.com/richtextbox-image/

違反を報告
引用返信
■35186 / ResNo.7)  Re[6]: Labelで文字単位の背景色
□投稿者/ ま〜 一般人(10回)-(2022/10/21(Fri) 14:04:58)
  • アイコン魔界さんKOZさんありがとうございます
    センター配置でFontサイズが変動するのでBOXだと入れ物が決まってしないつかいづらかっらので
    Labelだと枠がないのでLabelでなんとかならないかと思っていました
    教えて頂いた内容で解決しました。
    いつもありがとうございます

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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35172 / 親記事)  Lableのカラー色を文字変数から変更したい
□投稿者/ ま〜 一般人(6回)-(2022/10/18(Tue) 17:28:16)
  • アイコン環境/言語:[Windows10 Basic ] 
    分類:[.NET] 

    こんにちは、TextBoxの件でお世話になりました
    その時教えて頂いた事をLableに対して猿真似で転用しようとしたのですが。。
    Dim pdBackColor = TypeDescriptor.GetProperties(RichTextBox2).Find("BackColor", False)

    Lable.BackColor = DirectCast(pdForeColor.Converter.ConvertFromInvariantString("255,245,222"), Color)

    とやって見ましたがこれでは駄目なようで理解しきって無い私には難しい所です
    どうか宜しくお願いします。
違反を報告
引用返信

▽[全レス5件(ResNo.1-5 表示)]
■35173 / ResNo.1)  Re[1]: Lableのカラー色を文字変数から変更したい
□投稿者/ KOZ 一般人(3回)-(2022/10/18(Tue) 18:24:38)
  • アイコン
    No35172に返信(ま〜さんの記事)
    > Dim pdBackColor = TypeDescriptor.GetProperties(RichTextBox2).Find("BackColor", False)
    > Lable.BackColor = DirectCast(pdForeColor.Converter.ConvertFromInvariantString("255,245,222"), Color)
    
    pdBackColor/pdForeColor, RichTextBox2/Lable とバラバラですね。
    
    > とやって見ましたがこれでは駄目なようで理解しきって無い私には難しい所です
    
    理解できるまで弁士さんの回答を読み直すといいんじゃないでしょうか。

違反を報告
引用返信
■35175 / ResNo.2)  Re[1]: Lableのカラー色を文字変数から変更したい
□投稿者/ 魔界の仮面弁士 大御所(1458回)-(2022/10/18(Tue) 20:29:28)
  • アイコンNo35172に返信(ま〜さんの記事)
    > その時教えて頂いた事をLableに対して猿真似で転用しようとしたのですが。。
    Label が 3 回とも
    Lable と誤記っているのはさておき。

    Label1.BackColor = RichTextBox2.BackColor
    の動作を文字列経由で受け渡したい、という状況でしょうか。


    アンビエント等を意識せず、現在のプロパティ値を文字列化/復元するだけなら

     Dim cc As New ColorConverter()
     MessageBox.Show(cc.ConvertToInvariantString(Button1.ForeColor))

     Dim ic As New ImageConverter()
     MessageBox.Show(ic.ConvertToInvariantString(Button1.BackgroundImage))

     Dim fc As New FontConverter()
     MessageBox.Show(fc.ConvertToInvariantString(Button1.Font))

    のように、プロパティに応じた型コンバーターを用意することで、
    文字列への変換 & 文字列からの復元作業を行うこともできます。

    これらの型コンバーターは、先に使っていた
     pdForeColor.Converter
    の部分にあたります。


    Enabled プロパティなどのように、単純に現在値を保存してはならないメンバーについては
    やはり型コンバーターを使う前に、PropertyDescriptor を併用した方が良いですけれどね。
    (ShouldSerializeValue が False なら、現在の値を保存してはならないので)


    より厳密に言えば、SerializationVisibility が Content なプロパティ
    (TreeView の Nodes プロパティなど)も考慮する必要がありますし、
    設定順に意味のあるプロパティ(NumericUpDown の Value, Minimum, Maximum) などに対しては
    ISupportInitialize を併用しなければならないといったように、
    追加の作業を求められるプロパティもあったりするのが面倒なところなのですが。


    > Dim pdBackColor = TypeDescriptor.GetProperties(RichTextBox2).Find("BackColor", False)
    > Lable.BackColor = DirectCast(pdForeColor.Converter.ConvertFromInvariantString("255,245,222"), Color)

    Label の BackColor を設定することが目的なのであれば、
    何故、TypeDescriptor.GetProperties(RichTextBox2) を使うのですか?

    No35164 でも説明していますが、
    TypeDescriptor.GetProperties(X) で読み書きできるプロパティは、基本的には
    X 型のコントロールに対してです。Y 型のコントロールのプロパティに対しては
    TypeDescriptor.GetProperties(Y) でアクセスしてください。


    Dim rtbProps = TypeDescriptor.GetProperties(RichTextBox1)
    Dim rtbBackColor = rtbProps.Find("BackColor", False)
    MessageBox.Show(rtbBackColor.Converter.ConvertToInvariantString(RichTextBox1))


    .Find メソッドで個別に取り出す代わりに、
    すべてを列挙するならこんな感じ。

    Dim rtbProps = TypeDescriptor.GetProperties(RichTextBox1)
    For Each p As PropertyDescriptor In rtbProps
      Debug.WriteLine(StrDup(20, "-"c))
      Debug.WriteLine("DisplayName: " & p.DisplayName)
      Debug.WriteLine("Name: " & p.Name)
      Debug.WriteLine("Category: " & p.Category)
      Debug.WriteLine("Description: " & p.Description)
      Debug.WriteLine("DesignTimeOnly: " & p.DesignTimeOnly)
      Debug.WriteLine("IsBrowsable: " & p.IsBrowsable)
      Debug.WriteLine("IsReadOnly: " & p.IsReadOnly)
      Debug.WriteLine("SerializationVisibility: " & p.SerializationVisibility)
      Debug.WriteLine("GetChildProperties.Count: " & p.GetChildProperties().Count)

      Debug.WriteLine("ShouldSerializeValue(): " & p.ShouldSerializeValue(RichTextBox1))
      Debug.WriteLine("Value(): """ & p.Converter.ConvertToInvariantString(p.GetValue(RichTextBox1)) & """")
    Next


    なお、 PropertyDescriptor では無く PropertyInfo を列挙する手法もあります。
    永続化を目的として使う場合は、PropertyDescriptor の方が良さそうですが。

    Dim t As Type = RichTextBox1.GetType()
    For Each p As PropertyInfo In t.GetProperties()
      Debug.WriteLine(StrDup(20, "-"c))
      Debug.WriteLine("Name: " & p.Name)
      Debug.WriteLine("CanRead: " & p.CanRead)
      Debug.WriteLine("CanWrite: " & p.CanWrite)

      Debug.WriteLine("Value(): """ & String.Format("{0}", p.GetValue(RichTextBox1)) & """")
    Next
違反を報告
引用返信
■35176 / ResNo.3)  Re[2]: Lableのカラー色を文字変数から変更したい
□投稿者/ ま〜 一般人(8回)-(2022/10/19(Wed) 13:05:52)
  • アイコンいつもありがとうございます

    > Lable と誤記っているのはさておき。
    はい、間違ったスペルでコピペしたみたいです

    > Label1.BackColor = RichTextBox2.BackColor
    > の動作を文字列経由で受け渡したい、という状況でしょうか。
    ここも、誤記でlabelが正です

    Dim pdBackColor = TypeDescriptor.GetProperties(Label1).Find("BackColor", False)
    Label2.BackColor = DirectCast(pdForeColor.Converter.ConvertFromInvariantString("255,245,222"), Color)
    で上手く行きました

    原因は新しく作ったFormの先頭にImports System.ComponentModelが無かった為です。
    以前、教えて頂いた時のFormには書いてあったのですが今回それが無かった為に
    TypeDescriptorで構文エラーになっていました。
    以前色々とやってる中で何処かで見つけて書いていたもので何故必要なのかも理解せずに書いてましたので構文エラーとはならず気づかないまま。あれやこれややってました。。
    参照設定だけでは駄目なのでしょうか?
    何を基準にImports したら良いのか分からないですね。

    それと、またまた棚ぼたの文例ありがとうございます。
    凄く勉強になりました。

    然しながら
    > 永続化を目的として使う場合は、PropertyDescriptor の方が良さそうですが。
    > Dim t As Type = RichTextBox1.GetType()
    > For Each p As PropertyInfo In t.GetProperties()
    のPropertyInfoで構文エラーとなります。要因は上記と同じく何かImportsしなくては?。。。

解決み!
違反を報告
引用返信
■35178 / ResNo.4)  Re[3]: Lableのカラー色を文字変数から変更したい
□投稿者/ 魔界の仮面弁士 大御所(1459回)-(2022/10/19(Wed) 13:58:45)
  • アイコンNo35176に返信(ま〜さんの記事)
    >>For Each p As PropertyInfo In t.GetProperties()
    > のPropertyInfoで構文エラーとなります。要因は上記と同じく何かImportsしなくては?。。。

    PropertyInfo クラスの解説を見てみましょう。
    https://learn.microsoft.com/ja-jp/dotnet/api/system.reflection.propertyinfo?view=netframework-4.8

    冒頭の「定義」を見ると、PropertyInfo クラスは、
     名前空間:System.Reflection
    と書かれていることが分かるかと思いますので、この名前空間を明示してください。


    あるいは PropertyInfo の下に赤波線が出ていると思いますので、
    破線の PropertyInfo の上で [Alt]+[Shift]+[F10] を押すと表示される、
    修正候補から選ぶという手もあります。キーボード操作の他、
    赤破線の箇所をクリックすると表示される電球マークをマウス操作しても OK です。


    ということで、具体的な修正方法を 3 案挙げておきます。


    修正案1) プロジェクトのプロパティの [参照]-[インポートされた名前空間]
    にて「System.Reflection」にチェックを入れる

    修正案2) 該当の .vb ファイルの先頭に Imports 文を書く
    「Imports System.Reflection」


    修正案3) クラス名の前に名前空間を明示する…
    a) PropertyInfo
    b) Reflection.PropertyInfo
    c) System.Reflection.PropertyInfo
    d) Global.System.Reflection.PropertyInfo
違反を報告
引用返信
■35190 / ResNo.5)  Re[4]: Lableのカラー色を文字変数から変更したい
□投稿者/ ま〜 一般人(12回)-(2022/10/21(Fri) 17:21:39)
  • アイコン魔界さんへ
    勉強になります
    いつもありがとうございます。

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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35169 / 親記事)  Urlにアクセスするとダウンロードされるファイルを捕まえる
□投稿者/ Wan 付き人(75回)-(2022/10/17(Mon) 17:03:25)
  • アイコン環境/言語:[VisualBasic2019 Windows10 Basic VSTO Framework4.7.2] 
    分類:[.NET] 

    "https://f.irbank.net/files/1944/qq-net-sales.csv"
    上記のUrlにアクセスすると、csvファイルがダウンロードされます。
    このファイルを捕まえて、行単位でループさせたいです。
    次のコードでいけるかな?って思ったのですが、指定されたパスのフォーマットはサポートされていませんとでてしまいます。
    
    一旦Excelファイルに取り込んで、処理しているのですが、直接csvファイルを扱う方法を教えて頂けないでしょうか?
    Dim MyWorkBook As Excel.Workbook = Globals.ThisWorkbook.Application.Workbooks.Open("https://f.irbank.net/files/1944/qq-net-sales.csv")
    
    宜しくお願い致します。
    
    
    Dim sr As StreamReader = New   StreamReader("https://f.irbank.net/files/1944/qq-net-sales.csv")
    While Not sr.EndOfStream
      Dim line As String = sr.ReadLine()
       Dim values As String() = line.Split(","c)
       Dim lists As List(Of String) = New List(Of String)()
       lists.AddRange(values)
       For Each list As String In lists
        System.Console.Write("{0} ", list)
       Next
       System.Console.WriteLine()
    End While

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35170 / ResNo.1)  Re[1]: Urlにアクセスするとダウンロードされるファイルを捕まえる
□投稿者/ 魔界の仮面弁士 大御所(1455回)-(2022/10/17(Mon) 22:20:54)
  • アイコンNo35169に返信(Wanさんの記事)
    > 一旦Excelファイルに取り込んで、処理しているのですが、
    > 直接csvファイルを扱う方法を教えて頂けないでしょうか?

    えぇと……これはまた、なかなかに変則的な CSV データですね…?
    先頭 4 行が無ければ、 5 列構成の一般的な CSV と言えるのですが。


    ・文字コード:UTF-8 (BOM 無)
    ・改行種別:すべてのレコード末尾に LF 付与
    ・列数:行によって可変……珍しい
    ・空行:あり……0列とみなすべきか1列とみなすべきかが悩みどころ
    ・データ囲み引用符:「"」、ただし無いこともあるのでデータの一部として扱方が良さそう
    ・データ内改行:なし
    ・データ内カンマ:なし


    > System.Console.Write("{0} ", list)
    VSTO の場合、 Console が使えるとは限らないのでは…?


    > 直接csvファイルを扱う方法を教えて頂けないでしょうか?
    Tips ページのこのあたりで出来ませんでしたか?
    https://dobon.net/vb/dotnet/internet/webclientopenread.html
    https://dobon.net/vb/dotnet/internet/webrequest.html


    (案1) WebClient.DownloadString を使う

    Dim wc As New System.Net.WebClient()
    Dim rawData As String = wc.DownloadString("https://f.irbank.net/files/1944/qq-net-sales.csv")
    Dim csv()() As String = rawData.Split(ControlChars.Lf).Select(Function(line) line.Split(","c)).ToArray()


    (案2) My.Computer.Network.DownloadFile を使う

    Dim tmp = My.Computer.FileSystem.GetTempFileName()
    My.Computer.FileSystem.DeleteFile(tmp)
    My.Computer.Network.DownloadFile("https://f.irbank.net/files/1944/qq-net-sales.csv", tmp)
    Dim csv()() As String = File.ReadLines(tmp).Select(Function(line) line.Split(","c)).ToArray()
    My.Computer.FileSystem.DeleteFile(tmp)
違反を報告
引用返信
■35199 / ResNo.2)  Re[2]: Urlにアクセスするとダウンロードされるファイルを捕まえる
□投稿者/ Wan 付き人(76回)-(2022/10/25(Tue) 17:05:31)
  • アイコン返事が遅くなり申し訳ありません。
    教えて頂いた内容で、できました。
    ありがとうございました。

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

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



■記事リスト / ▲上のスレッド
■35165 / 親記事)  タブレット等でスワイプによるスクロールを実装
□投稿者/ 炎の妖精さん 一般人(7回)-(2022/10/13(Thu) 10:06:36)
  • アイコン環境/言語:[Windows10(64bit)_VB.NET] 
    分類:[.NET] 

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

    表題の通り、スワイプでのスクロールを実装したいと考えております。
    Windowsフォーム上に以下のコントロールを配置しました。

    ■FlowLayoutPanel(スクロールを表示してここでスクロールしたい)
    └■UserControl(5*10のボタンが並べられている)
     ├■Button01
     ├■Button02
     …
     ├■Button49
     └■Button50


    なぜこのような配置の仕方をしている理由ですが、
    タブレットの解像度が1920*1280、ボタンや文字もなるべく大きめということもあり、
    5*10のボタンを配置する場合にはタブレットの画面に入りきらない為、スクロールを実装することになりました。

    DataGridViewでは自動でスワイプによるスクロールが出来るのですが、
    上記のような配置の場合ではスクロールが出来ませんでした。
    ※もちろんマウスホイールによるスクロールは可能でした

    処理としてはUserControlのスクロール移動量を取得して
    FlowLayoutPanelにスクロール移動量を付加させるというような処理になるのでしょうか?

    スクロールに関しての処理は初めての為、ご教授いただければ幸いです。
違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35167 / ResNo.1)  Re[1]: タブレット等でスワイプによるスクロールを実装
□投稿者/ 魔界の仮面弁士 大御所(1454回)-(2022/10/13(Thu) 11:14:13)
  • アイコン2022/10/13(Thu) 11:18:44 編集(投稿者)

    Windows Touch あるいは スタイラス対応のタブレット デバイスが
    現在手元に無いため、動作を確認せずに回答しています。
    余裕があれば追って確認しますが…とりあえず状況把握として逆質問。


    No35165に返信(炎の妖精さんさんの記事)
    > 上記のような配置の場合ではスクロールが出来ませんでした。
    マウスホイールによる操作の場合、
    「ホバーしたときに非アクティブウィンドウをスクロールする」
    が On / Off の状態で動作が変わるかと思いますが、スワイプの場合、
    上記の設定切替に近い動作にしたいのでしょうか。それともスワイプは
    上記設定によらず、常に同じ動作になって欲しいのでしょうか。
    https://dynabook.com/assistpc/faq/pcdata2/017955.htm


    > Windowsフォーム上に以下のコントロールを配置しました。
    Button, UserControl, FlowLayoutPanel のそれぞれに対して
     ・AutoSize プロパティによって自動変更されるもの
     ・Dock や Anchor などによってリサイズされうるもの
     ・固定サイズで配置されるもの
    などがどうなっているのか定かでは無いので、
    当方で状況を読み切れていない部分があるかもしれませんが:


    今回、FlowLayoutPanel が採用されている理由は何ですか?
    FlowLayoutPanel 内にあるコントロールが UserControl 一つだけなら
    フローレイアウトになることも無さそうなので、素の Panel で良いような。

    (案1) デザイン時にスクロールできない
     Panel1 (AutoScroll = False)
     └UserControl1 (AutoScroll = True , Dock = Fill, Anchor = Top,Left)

    (案2) デザイン時にもスクロール可能だが、カプセル化しにくいかも?
     Panel1 (AutoScroll = True)
     └UserControl1 (AutoScroll = False, Dock = None, Anchor = Top,Left)


    FlowLayoutPanel 版は、Panel 版の 案2 に近い設計なのかと予想していますが、
    上記それぞれを試した時、
     a) マウス(あるいはタッチパッド)によるホイール回転操作
     b) マウスによるパン操作(ホイールを押しながらのドラッグ)あるいは同等のタッチパッド操作
     c) スタイラス(ペン)を画面に押し付けた状態でのスワイプ操作
     d) スタイラスのスクロールボタンを押した状態でのホバー操作
     e) Windows Touch によるスワイプ操作
    の動作に違いが生じるでしょうか。それとも 案1/案2 で変わらないでしょうか。

    a と d は非アクティブ状態でも操作できるのに対して、
    b, c, e はタップ(あるいはクリック)操作が先に入るので、
    常にアクティブウィンドウに対して操作することになるという違いがありそうです。


    ところで、今回のスワイプ操作はどの場所から始める想定でしょうか?
     ア) FlowLayoutPanel のスクロールバー部
     イ) FlowLayoutPanel の余白部(UserControl の外側)
     ウ) UserControl のクライアント領域
     エ) 各ボタンの上
     オ) 上記以外

    フォーカスを受け取れるコントロール、かつ、スクロール可能なコントロールの
    上でスワイプ操作を開始すると、スクロールが発生し無さそうなので
    念のために確認しています。
違反を報告
引用返信
■35168 / ResNo.2)  Re[1]: タブレット等でスワイプによるスクロールを実装
□投稿者/ 炎の妖精さん 一般人(8回)-(2022/10/13(Thu) 11:16:02)
  • アイコンすみません。解決しました。

    他社サイト様にて
    C#で書かれたコードをVB.NETに書き直し
    一部のコードを直したら想定通りの動作となりました。

    ■Windowsフォームアプリにおけるスワイプによるスクロールについて
     ※URLは長いので省略させていただきます。
解決み!
違反を報告
引用返信

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






Mode/  Pass/


- Child Tree -