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

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

記事リスト ( )内の数字はレス数
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) | Nomalvb.netで7zの圧縮・解凍をしたい。(2) | NomalCommandBuilderによって作られるCommandTextの内容(5) | NomalDataGridViewの特定セルにボタンを配置する方法(5) |



■記事リスト / ▼下のスレッド
■35226 / 親記事)  DataGridViewのドロップダウンリストの表示と選択後の値を分けたい
□投稿者/ 炎の妖精さん 一般人(13回)-(2022/11/14(Mon) 09:39:20)
  • アイコン環境/言語:[Win10(64bit)_VB.NET(Framework 3.5)] 
    分類:[.NET] 

    いつもお世話になっております。

    表題の件について、
    Aのドロップダウンリストですが、
    「3桁(半角のみ):16桁(全角8桁)」という内容を表示させております。

    Aのドロップダウンリストを選択したら
    @には「3桁(半角のみ)」を表示させたいのですが、可能でしょうか?
323×96 => 250×74
イメージ
2022_11_14_09_22_01_.jpg
/7KB
違反を報告
引用返信

▽[全レス1件(ResNo.1-1 表示)]
■35227 / ResNo.1)  Re[1]: DataGridViewのドロップダウンリストの表示と選択後の値を分けたい
□投稿者/ 炎の妖精さん 一般人(14回)-(2022/11/14(Mon) 09:54:55)
  • アイコンすみません、自己解決しました。

    CellFormattingで
    左側3文字を指定すれば想定通りの結果となりました。
    解決とさせていただきます!
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35224 / 親記事)  列車の時間ごとの位置情報を表示したいです。
□投稿者/ 福ちゃん 一般人(1回)-(2022/11/12(Sat) 18:49:31)
  • アイコン環境/言語:[windows10,javascript,html5] 
    分類:[その他] 

    こちら、列車の走行位置のプログラムを作っています。
    そこで気になるのが、日付ごとに、ダイヤを変更することは不可能かということです。
    例えば、2022年の例ですと、1月1〜3日は、Aダイヤで運行し、1月10日は、Bダイヤ、一般の日はCダイヤというように、
    3パターンのダイヤパターンを作りたいのですが、
    現状のflagで、やろうとしたところ、これが要するにonとoffの切り替えしかできず、
    すなわち、AかBかというのしか作れないのです。
    つまり、flagに代わる新たなパターンを作りたいのです。
    自分は触り程度しかjavascriptが扱えません。
    省略なしにご教授いただければ幸いです。
    参照元はこちらです。
    http://r113.web.fc2.com/p/viewer/oc-port/index.html
    以下はおおもとのソースです。
    <code>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <!-- saved from url=(0051)http://r113.web.fc2.com/p/viewer/oc-port/index.html -->
    <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <meta http-equiv="Content-Style-Type" content="text/css">
    <meta http-equiv="Content-Script-Type" content="text/javascript">
    <meta name="author" content="">
    <meta name="description" content="">
    <meta name="keywords" content="">
    <title>大阪市営地下鉄 ニュートラム(南港ポートタウン線) (コスモスクエア?住之江公園) 列車在線ビューア</title>

    <!--スタイルシート-->
    <link rel="stylesheet" href="./大阪市営地下鉄 ニュートラム(南港ポートタウン線) (コスモスクエア?住之江公園) 列車在線ビューア_files/style.css" type="text/css">

    <!--JavaScript-->
    <script type="text/javascript" src="./大阪市営地下鉄 ニュートラム(南港ポートタウン線) (コスモスクエア?住之江公園) 列車在線ビューア_files/main.js.ダウンロード" charset="UTF-8"></script>
    <script type="text/javascript" src="./大阪市営地下鉄 ニュートラム(南港ポートタウン線) (コスモスクエア?住之江公園) 列車在線ビューア_files/diaTypeJudge.js.ダウンロード" charset="UTF-8"></script>

    <script type="text/javascript" src="./大阪市営地下鉄 ニュートラム(南港ポートタウン線) (コスモスクエア?住之江公園) 列車在線ビューア_files/dia-20130323.js.ダウンロード" charset="UTF-8"></script>
    <script type="text/javascript" src="./大阪市営地下鉄 ニュートラム(南港ポートタウン線) (コスモスクエア?住之江公園) 列車在線ビューア_files/meta.js.ダウンロード" charset="UTF-8"></script>
    <script type="text/javascript" src="./大阪市営地下鉄 ニュートラム(南港ポートタウン線) (コスモスクエア?住之江公園) 列車在線ビューア_files/track.js.ダウンロード" charset="UTF-8"></script>


    <script type="text/javascript">
    </script>

    <style type="text/css">
    </style>

    </head>

    <body onresize="setDisplayArea()">
    この間省略
    &gt; 大阪市営地下鉄 ニュートラム(南港ポートタウン線) (コスモスクエア?住之江公園) 2013年3月23日改正


    <!--JavaScript読み込み-->
    <script type="text/javascript">
    writeBasicHTMLSet();
    main();
    </script>以下略</code>
    <code>
    //平日ダイヤか土・休日ダイヤかを判定する
    function dayJudge(year, month, date, day)
    {
    //alert(year +" "+ month +" "+ date +" "+ day)
    //フラグ
    var weekdayFlag = true;

    //月?金なら立てる
    if(day >= 1 && day <= 5)
    weekdayFlag = day >= 1 && day <= 5;
      else if(day==6)
    weekdayFlag2 = day == 6
    else
    weekdayFlag = false;

    //祝日ならたおす
    if(year == 2013 && month == 1 && date == 1)
    weekdayFlag = false;
    この間省略
    else if(year == 2015 && month == 3 && date == 21)
    weekdayFlag = false;

    return weekdayFlag;
    }
    </code>
    後ちなみに、
    <code>
    function dayJudge(year, month, date, day)
    {
    //alert(year +" "+ month +" "+ date +" "+ day)</code>
    は、
    運行パターンにかかわると思われますが、
    flag形式をやめた場合、
    これは、存置のままでも可能ですか。
    それとも書き換える必要がありますか。
違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35225 / ResNo.1)  Re[1]: 列車の時間ごとの位置情報を表示したいです。
□投稿者/ Azulean 大御所(534回)-(2022/11/13(Sun) 14:28:12)
  • アイコン2022/11/13(Sun) 14:35:19 編集(投稿者)

    返信を書くかどうか悩みました。
    一度、"書き込みのルールについて" の "「安易な質問」とは?"、"丸投げした投稿" を読んでみてください。
    下記のあたりが危ういか、抵触しているかになっていると思います。

    > 自分は触り程度しかjavascriptが扱えません。
    > 省略なしにご教授いただければ幸いです。


    No35224に返信(福ちゃんさんの記事)
    > こちら、列車の走行位置のプログラムを作っています。

    参考サイトが作ろうとしているものか、それに近しいものですよね?

    それをコピペしていじるのは、作り出すというよりは改変・翻案といった話になっていくので、著作権の問題が出てきます。
    練習・習作の間は私的複製の範囲で収まるかもしれませんが、外部公開したら著作権侵害のトラブルになるのでご注意ください。


    > そこで気になるのが、日付ごとに、ダイヤを変更することは不可能かということです。
    (略)
    > すなわち、AかBかというのしか作れないのです。

    参考にされている大阪メトロ(旧大阪市交通局)は、平日ダイヤと、土・休日ダイヤしか存在せず、お盆であろうと年末年始であろうと土・休日ダイヤになるだけなので、2 択で十分となります。
    2 択で十分なのに、3 択以上のコードを書く必要はありませんので、参考サイトは bool の flag 管理で実現しているのでしょう。


    > つまり、flagに代わる新たなパターンを作りたいのです。
    > 自分は触り程度しかjavascriptが扱えません。

    「作る」とは「コピペしていじる」ではなく、「自分でアルゴリズムを考え、コードを書いて、デバッグ・修正して目的・目標を実現すること」ですので、「作りたい」のであれば学びを深めて自分で生み出しましょう。

    flag は 2 値分割ですので、任意の N 値分割をするためにはどういったデータ構造・制御構造にすべきかは、開発言語によらない、プログラミング(アルゴリズム)の世界の話です。
    それがうまく構築できるかどうかがまずあって、その後に開発言語・環境における実現方法に落とし込んでいくことになります。


    「javascript がさわりしかわからないのですべて教えて欲しい」は「依頼」です。
    「報酬をもらえる仕事」に値すると思いますので、本気であなたに合わせた教習を望むのなら、そういった対応をしてくれるサービスを探して、対価を払いましょう。


    ※時刻表のデータも勝手に利用するとダメとしている鉄道会社やデータ提供者もあるかもしれません。ご注意ください。
違反を報告
引用返信
■35232 / ResNo.2)  【報告】この投稿はマルチポストです
□投稿者/ (報告) 一般人(1回)-(2022/11/15(Tue) 18:04:07)
  • アイコンこの投稿はマルチポストです。もし元記事の投稿者にマルチポストの心当たりがない場合は、すぐに返信でお知らせください。

    ●マルチポストされている場所
    https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=5398

    ----------
    この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのルールについて」をお読みください。

    ●書き込みのルールについて
    https://dobon.net/vb/bbs/index.html
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35222 / 親記事)  画像の中心を基点に回転
□投稿者/ ま〜 一般人(16回)-(2022/11/11(Fri) 15:16:16)
  • アイコン環境/言語:[Vs2022 basic] 
    分類:[.NET] 

    こんにちは
    画像の回転に付いてですが中央を基点に5度単位で回転させたいのですが良い方法はないでしょうか?
    宜しくお願いします

違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■35223 / ResNo.1)  Re[1]: 画像の中心を基点に回転
□投稿者/ 魔界の仮面弁士 大御所(1477回)-(2022/11/11(Fri) 16:27:00)
  • アイコンNo35222に返信(ま〜さんの記事)
    > 中央を基点に5度単位で回転させたいのですが

    WPF の話なら、RenderTransformOrigin が (0.5, 0.5) の
    RenderTransform を使用して、Angle に 5 の倍数をセットすれば良いかと。

    <Image Source="/exmaple.jpg" RenderTransformOrigin=".5,.5">
    <Image.RenderTransform>
    <RotateTransform Angle="5" />
    </Image.RenderTransform>
    </Image>


    WinForm なら、Graphics クラスで DrawImage する前に、
    TranslateTransform と RotateTransform を指定する形です。
    https://dobon.net/vb/dotnet/graphics/transform.html#section1
    http://nonsoft.la.coocan.jp/SoftSample/CS.NET/SampleRotateBitmap.html
違反を報告
引用返信
■35228 / ResNo.2)  Re[2]: 画像の中心を基点に回転
□投稿者/ ま〜 一般人(17回)-(2022/11/14(Mon) 13:38:53)
  • アイコン魔界さんいつもありがとうございます

    数日前に参考にさせて頂きコピペして試行錯誤でやってみたのですがどうしても
    画像の中心が基点とならないので困ってます。と言うか分からないが。。。

    > TranslateTransform と RotateTransform を指定する形です。
    TranslateTransformは画像の左上の0,0を移動するみたいでここを基点に回転して5度づつ回転させると左上を基点に扇みたいになります(理解してないのかも?)

    希望は元の画像の中心を基点に回転させたい。

    > http://nonsoft.la.coocan.jp/SoftSample/CS.NET/SampleRotateBitmap.html
    を試しましたが
    Private Function RotateBitmap( _
    ByVal bmp As Bitmap, ByVal angle As Single, ByVal x As Integer, ByVal y As Integer) As Bitmap

    ByValの所で構文エラーとなってしまいます。
    解決策が分からないです。



違反を報告
引用返信
■35230 / ResNo.3)  Re[3]: 画像の中心を基点に回転
□投稿者/ 魔界の仮面弁士 大御所(1479回)-(2022/11/14(Mon) 18:58:36)
  • アイコンhttp://nonsoft.la.coocan.jp/SoftSample/CS.NET/SampleRotateBitmap.html
    ではなく
    http://nonsoft.la.coocan.jp/SoftSample/VB.NET/SampleRotateBitmap.html
    を紹介するべきでしたね。


    No35228に返信(ま〜さんの記事)
    > 魔界さんいつもありがとうございます
    https://twitter.com/Benshi_Orator/status/1580431600499961858


    >> TranslateTransform と RotateTransform を指定する形です。
    > TranslateTransformは画像の左上の0,0を移動するみたいでここを基点に回転して5度づつ回転させると左上を基点に扇みたいになります(理解してないのかも?)

    先に提示した URL で解説されているように
    まず、原点を (0,0) よりさらに左上(マイナス座標)にずらしてから、
    その後、RotateTransform で回転させてから、
    今度は右下方向(プラス座標)に復帰させたのち、
    DrawImage または DrawImageUnscaled で描画します。

    描画した後は座標系が回転したままなので、連続して描画する場合は
    GraphicsState を併用します(Save / Restore メソッド)。
    ※あるいは ResetTransform メソッド。


    なお、元のサンプルでは、「PictureBox の中心」で回転させていますので、
    「画像の中心」で回転させたい場合は
     RotateBitmap(org, ang, PictureBox1.Width \ 2, PictureBox1.Height \ 2)
    ではなく
     RotateBitmap(org, ang, org.Width \ 2, org.Height \ 2)
    とします。

    また、元画像の描画位置を左上以外(x2, y2)にしたい場合は、回転後の
     g.TranslateTransform(x, y, MatrixOrder.Append)
    の後に、さらに
     g.TranslateTransform(x2, y2, MatrixOrder.Append)
    を加えてから描画するようにします。



    > Private Function RotateBitmap( _
    > ByVal bmp As Bitmap, ByVal angle As Single, ByVal x As Integer, ByVal y As Integer) As Bitmap
    > ByValの所で構文エラーとなってしまいます。

    いやいや。
    せめて、どの ByVal が何という構文エラーになっているのかまで
    きちんと内容を示しましょうよ。

    Function を置く場所を、文法的に間違えているということはないですよね…?
    (Class や Module の外側に書こうとしているなど)
違反を報告
引用返信
■35231 / ResNo.4)  Re[4]: 画像の中心を基点に回転
□投稿者/ ま〜 一般人(19回)-(2022/11/15(Tue) 17:03:14)
  • アイコン感謝です。

    出来ました。

    亀速度で勉強中です。少しずつですが理解出来る様になってきました。道のりは長いですが。。。

    魔界さんのおかげです。
    ありがとうございます。
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35216 / 親記事)  DataGridViewの行ヘッダーに行番号を表示した時のエラー
□投稿者/ たこ 一般人(12回)-(2022/11/04(Fri) 02:12:28)
  • アイコン環境/言語:[Windows10 VB.NET .NET Framework 4.7.2 VS2019] 
    分類:[.NET] 

    いつもお世話になります。

    DataGridViewの行ヘッダーに行番号を表示する
    https://dobon.net/vb/dotnet/datagridview/drawrownumber.html

    を使わせて頂いておりますが、1つ目のデータを挿入した際に「System.Configuration.ConfigurationErrorsException: '構成システムを初期化できませんでした。'」と出て停止してしまいます。
    (2つ目のデータ以降はエラーが出ない)
    「例外設定」の「次からスローされた場合を除く」の項目に「Log.dll」とあるので、ログクラスが何かしらいたずらしているとは思うのです。

    何か解決の糸口は無いかと書込みさせて頂きます。


    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Private Sub DataGridView1_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
      '列ヘッダーかどうか調べる
        If e.ColumnIndex < 0 And e.RowIndex >= 0 Then
          'セルを描画する
          e.Paint(e.ClipBounds, DataGridViewPaintParts.All)       '←ここで発生 コメントアウトするとフォーム拡大縮小時にゴミが残る…

          '行番号を描画する範囲を決定する
          'e.AdvancedBorderStyleやe.CellStyle.Paddingは無視しています
          Dim indexRect As Rectangle = e.CellBounds
          indexRect.Inflate(-2, -2)
          '行番号を描画する
          TextRenderer.DrawText(e.Graphics,
                    (e.RowIndex + 1).ToString(),
                    e.CellStyle.Font,
                    indexRect,
                    e.CellStyle.ForeColor,
                    TextFormatFlags.Right Or TextFormatFlags.VerticalCenter)
          '描画が完了したことを知らせる
          e.Handled = True
        End If

        DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray
      End Sub
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------



    呼出し元
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
      Private Sub DGVDataAdd(workStr As List(Of String()))
        DataGridView1.Rows.Clear()
        On Error GoTo ErrorNext
        System.Threading.Monitor.Enter(workStr)
        Dim ws As List(Of String()) = workStr
        System.Threading.Monitor.Exit(workStr)
        System.Threading.Monitor.Enter(ws)
        Dim x As Integer = 0
        For Each work In ws
          System.Threading.Monitor.Enter(work)
          DataGridView1.Rows.Add(work)
          DataGridView1(LogData.LogKinds, x).Style.BackColor = LogKind_ColorChange(work)
          DataGridView1(LogData.Operation, x).Style.ForeColor = Operation_ColorChange(work)
          x += 1
          System.Threading.Monitor.Exit(work)
        Next
        System.Threading.Monitor.Exit(ws)
    ErrorNext:
        DataGridView1.Refresh()
      End Sub
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    いろんなスレッドに呼ばれるので、エラーが出て最終的に「On Error Resume Next」を付けました^^;



    呼出し元の呼出し元
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
      Private Delegate Sub DGVAddInvoke(DataStr As List(Of String()))

      ''' <summary>
      ''' AlertLog変更イベント
      ''' </summary>
      Private Sub _LogStock__AlartLogEvent(sender As Object, e As EventArgs) Handles _LogStock._AlertLogEvent
        If DispLevel = LogEventArgs.Kinds.Alart Then
          Invoke(New DGVAddInvoke(AddressOf DGVDataAdd), _LogStock.AlertLog)
        End If
      End Sub

      ''' <summary>
      ''' OperateLog変更イベント
      ''' </summary>
      Private Sub _LogStock__OperateLogEvent(sender As Object, e As EventArgs) Handles _LogStock._OperateLogEvent
        If DispLevel = LogEventArgs.Kinds.Operate Then
          Invoke(New DGVAddInvoke(AddressOf DGVDataAdd), _LogStock.OperateLog)
        End If
      End Sub

      ''' <summary>
      ''' SystemLog変更イベント
      ''' </summary>
      Private Sub _LogStock__SystemLogEvent(sender As Object, e As EventArgs) Handles _LogStock._SystemLogEvent
        If DispLevel = LogEventArgs.Kinds.System Then
          Invoke(New DGVAddInvoke(AddressOf DGVDataAdd), _LogStock.SystemLog)
        End If
      End Sub

      ''' <summary>
      ''' DebugLog変更イベント
      ''' </summary>
      Private Sub _LogStock__DebugLogEvent(sender As Object, e As EventArgs) Handles _LogStock._DebugLogEvent
        If DispLevel = LogEventArgs.Kinds.Debug Then
          Invoke(New DGVAddInvoke(AddressOf DGVDataAdd), _LogStock.DebugLog)
        End If
      End Sub
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    以上3つのメソッドはLogDispクラスで、イベントはLogクラスから飛んできます。



    Logクラス
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
      Public Delegate Sub LogEventHandler(sender As Object, e As EventArgs)
      Public Event _AlertLogEvent As LogEventHandler
      Public Event _OperateLogEvent As LogEventHandler
      Public Event _SystemLogEvent As LogEventHandler
      Public Event _DebugLogEvent As LogEventHandler

      Private _AlertLog As New List(Of String())
      Private _OperateLog As New List(Of String())
      Private _SystemLog As New List(Of String())
      Private _DebugLog As New List(Of String())


      Public Sub Write(sender As Object, e As LogEventArgs)

        〜〜〜 (中略) 〜〜〜

        If e.LogKinds = LogEventArgs.Kinds.System Then
          _DebugLog.Insert(0, WriteData.Split(","))
          _SystemLog.Insert(0, WriteData.Split(","))
          If _SystemLog.Count > _MaxDispLog Then _SystemLog.RemoveAt(_MaxDispLog)
          RaiseEvent _SystemLogEvent(Me, New EventArgs())
          RaiseEvent _DebugLogEvent(Me, New EventArgs())
          Exit Sub
        End If
      End Sub
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

    LogクラスもDispLogも同じLogプロジェクト内で、クラスライブラリ
    DispLogはユーザーコントロールです。

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

▽[全レス4件(ResNo.1-4 表示)]
■35218 / ResNo.1)  Re[1]: DataGridViewの行ヘッダーに行番号を表示した時のエラー
□投稿者/ 魔界の仮面弁士 大御所(1475回)-(2022/11/04(Fri) 10:44:35)
  • アイコンNo35216に返信(たこさんの記事)
    >「System.Configuration.ConfigurationErrorsException: '構成システムを初期化できませんでした。'」
    プログラムそのものでは無く、アプリケーション構成ファイルである
    exe名.config (開発時は app.config) ファイル、あるいは user.config の
    内容に不整合や破損があると、その例外が発生します。
    user.config の場所についてはこちら。
    https://atmarkit.itmedia.co.jp/fdotnet/dotnettips/558appsettings/appsettings.html


    ということで、ログ関連の設定情報に問題があるのでは無いでしょうか。

    プロジェクトの構成が分からないので具体的なアドバイスはできませんが、
    Log.dll のプロジェクトがあるのなら、確認すべき app.config は Log プロジェクトの app.config ではなく、
    exe 側のプロジェクト側の app.cofing のはずです。exe 側の .config に対して、Log プロジェクト用の
    エントリーが正しく記録されているかどうかを確認してみてください。


    > LogクラスもDispLogも同じLogプロジェクト内で、クラスライブラリ
    > DispLogはユーザーコントロールです。
    NLog や log4net の類では無く、自作のロギングクラスということだとすると、
    第三者には、具体的なアドバイスが難しいかもしれません。


    > 呼出し元
    > Private Sub DGVDataAdd(workStr As List(Of String()))
    >   DataGridView1.Rows.Clear()
    >   On Error GoTo ErrorNext
    DataGridView1.Rows.Clear() が呼ばれているという事は、DGVDataAdd メソッドの呼び出し元が
    UI スレッド上からの呼び出しであることは保証されているのですよね?

    で、引数の List(Of ) は、「別スレッドでも同時に読み書きされる可能性がある」という事でしょうか。


    > いろんなスレッドに呼ばれるので、エラーが出て最終的に「On Error Resume Next」を付けました^^;
    え?「いろんなスレッドに呼ばれる」のですか?
    この実装だと、UI スレッド以外からの呼び出しは NG に見えますが…。

    ワーカースレッドから呼ばれることを前提としているのであれば、
    DataGridView に対する読み書き部分を取り除く必要があるでしょう。


    >   System.Threading.Monitor.Enter(workStr)
    >   Dim ws As List(Of String()) = workStr
    >   System.Threading.Monitor.Exit(workStr)
    >   System.Threading.Monitor.Enter(ws)
    ・ws は、workStr のコピーでは無く、同一インスタンスへの参照ですよね。
     Exit 直後に再 Enterをする実装になっているのは何故ですか?
     ループ全体を ws で囲って、ループ内では workStr で囲っている理由が分からないです。
     (ReaderWriterLock クラスのような事がしたいわけでも無さそうですし…)

    ・もしも処理によって粒度の異なるロックを用意したいという意図であれば、
     ロック範囲のレベルごとに、別々の「Object インスタンス」を設けた方が良いかもしれません。
      Private ReadOnly lockObject As New Object()

    ・UI スレッドで Monitor を扱う場合は、無制限待機になってしまうことを避けるため、
     .Enter ではなく、待機上限時間を指定可能な .TryEnter の方が安全かと思います。
     (ロック失敗時にアプリケーション例外とするのか、処理を無視するのか、リトライ判定させるかは要件次第…)
違反を報告
引用返信
■35219 / ResNo.2)  Re[2]: DataGridViewの行ヘッダーに行番号を表示した時のエラー
□投稿者/ たこ 一般人(14回)-(2022/11/04(Fri) 22:14:40)
  • アイコンNo35218に返信(魔界の仮面弁士さんの記事)
    > ■No35216に返信(たこさんの記事)

    いつもお世話になります。
    魔界の仮面弁士様、早速のご回答ありがとうございます。



    > ということで、ログ関連の設定情報に問題があるのでは無いでしょうか。
    >
    > プロジェクトの構成が分からないので具体的なアドバイスはできませんが、
    > Log.dll のプロジェクトがあるのなら、確認すべき app.config は Log プロジェクトの app.config ではなく、
    > exe 側のプロジェクト側の app.cofing のはずです。exe 側の .config に対して、Log プロジェクト用の
    > エントリーが正しく記録されているかどうかを確認してみてください。


    exe側のApp.config
    ----------------------------------------------------------------------------------------------------
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
      </configSections>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
      </startup>
    </configuration>
    ----------------------------------------------------------------------------------------------------
    別におかしいところは見当たらず…orz




    > DataGridView1.Rows.Clear() が呼ばれているという事は、DGVDataAdd メソッドの呼び出し元が
    > UI スレッド上からの呼び出しであることは保証されているのですよね?


    InvokeでUIスレッド上からの呼び出しであることは保証されている…と思っています。。。



    > で、引数の List(Of ) は、「別スレッドでも同時に読み書きされる可能性がある」という事でしょうか。


    はい。値渡ししています。


    >>いろんなスレッドに呼ばれるので、エラーが出て最終的に「On Error Resume Next」を付けました^^;
    > え?「いろんなスレッドに呼ばれる」のですか?
    > この実装だと、UI スレッド以外からの呼び出しは NG に見えますが…。


    正確にはいろいろなクラスのメソッドからイベントで呼ばれる…でした^^;



    > ワーカースレッドから呼ばれることを前提としているのであれば、
    > DataGridView に対する読み書き部分を取り除く必要があるでしょう。
    >
    >
    >>  System.Threading.Monitor.Enter(workStr)
    >>  Dim ws As List(Of String()) = workStr
    >>  System.Threading.Monitor.Exit(workStr)
    >>  System.Threading.Monitor.Enter(ws)
    > ・ws は、workStr のコピーでは無く、同一インスタンスへの参照ですよね。
    >  Exit 直後に再 Enterをする実装になっているのは何故ですか?
    >  ループ全体を ws で囲って、ループ内では workStr で囲っている理由が分からないです。
    >  (ReaderWriterLock クラスのような事がしたいわけでも無さそうですし…)
    >
    > ・もしも処理によって粒度の異なるロックを用意したいという意図であれば、
    >  ロック範囲のレベルごとに、別々の「Object インスタンス」を設けた方が良いかもしれません。
    >   Private ReadOnly lockObject As New Object()
    >
    > ・UI スレッドで Monitor を扱う場合は、無制限待機になってしまうことを避けるため、
    >  .Enter ではなく、待機上限時間を指定可能な .TryEnter の方が安全かと思います。
    >  (ロック失敗時にアプリケーション例外とするのか、処理を無視するのか、リトライ判定させるかは要件次第…)


    TryEnterと言うメソッドもあるのですね…
    まだまだスレッドとエラー処理については勉強が必要そうです……


    で、本題の「DataGridViewの行ヘッダーに行番号を表示した時のエラー」について、今回はそこまで厳密にリアルタイムに表示されなくても良い為、
    魔法の言葉「On Error Resume Next」で逃げる事にしました^^;

    最終形
    -----------------------------------------------------------------------------------------------------------------------------------------------------
      Private Sub DataGridView1_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
        On Error Resume Next
        '列ヘッダーかどうか調べる
        If e.ColumnIndex < 0 And e.RowIndex >= 0 Then
          'セルを描画する
          e.Paint(e.ClipBounds, DataGridViewPaintParts.All)

          '行番号を描画する範囲を決定する
          'e.AdvancedBorderStyleやe.CellStyle.Paddingは無視しています
          Dim indexRect As Rectangle = e.CellBounds
          indexRect.Inflate(-2, -2)
          '行番号を描画する
          TextRenderer.DrawText(e.Graphics,
                     (e.RowIndex + 1).ToString(),
                     e.CellStyle.Font,
                     indexRect,
     e.CellStyle.ForeColor,
                     TextFormatFlags.Right Or TextFormatFlags.VerticalCenter)
          '描画が完了したことを知らせる
          e.Handled = True
        End If

        DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray
      End Sub


      Private Sub DGVDataAdd(workStr As List(Of String()))
        DataGridView1.Rows.Clear()
        On Error GoTo ErrorNext
        Dim ws As List(Of String()) = workStr
        Dim x As Integer = 0
        For Each work In ws
          DataGridView1.Rows.Add(work)
          DataGridView1(LogData.LogKinds, x).Style.BackColor = LogKind_ColorChange(work)
          DataGridView1(LogData.Operation, x).Style.ForeColor = Operation_ColorChange(work)
          x += 1
        Next
    ErrorNext:
        DataGridView1.Refresh()
      End Sub

    -----------------------------------------------------------------------------------------------------------------------------------------------------


    板汚し失礼致しました。
    またよろしくお願い致します。
    ありがとうございました。
解決み!
違反を報告
引用返信
■35220 / ResNo.3)  Re[3]: DataGridViewの行ヘッダーに行番号を表示した時のエラー
□投稿者/ 魔界の仮面弁士 大御所(1476回)-(2022/11/07(Mon) 17:05:33)
  • アイコンNo35219に返信(たこさんの記事)
    >> あるいは user.config の内容に不整合や破損があると、
    > exe側のApp.config
    > 別におかしいところは見当たらず…orz
    user.config や machine.config は大丈夫なのですね?
    https://ja.stackoverflow.com/questions/65632/%E6%A7%8B%E6%88%90%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%81%A7%E3%81%97%E3%81%9F-%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6


    また、exe 側は .config 設定が特に無いものの、
    dll 側では connectionStrings や applicationSettings を
    登録してある…という事も無いのですよね。

    とすると、Invoke のタイミングの問題?


    > 正確にはいろいろなクラスのメソッドからイベントで呼ばれる…でした^^;
    常に Invoke であれば「いろんなスレッドに呼ばれる」ことはなく、
    UI スレッドからの呼び出しであると言えそうですが、Invoke し忘れが怖い所。

    呼び出し元の使い方を保証できない場合は、InvokeRequired を使って
    「別スレッドから呼び出された場合は、自身を Invoke しなおす」という
    実装にする手法があります。
    https://atmarkit.itmedia.co.jp/ait/articles/0506/17/news111.html#:~:text=invokeメソット&#12441;か&#12441;必要かと&#12441;うか

    いずれにせよ、イベント再入などが起こらないように注意が必要です。
    フォームを閉じている最中や起動途中に、割り込まれて Invoke されるような
    ケースがありえる場合は、追加の保護機構が必要になるかもしれません。


    >>で、引数の List(Of ) は、「別スレッドでも同時に読み書きされる可能性がある」という事でしょうか。
    > はい。値渡ししています。
    ロギングのため、追記される差分情報のみを同期的に渡すのであれば、
    同一インスタンスでは無く、値のコピーを渡す方が簡単だったりします。
    同一インスタンスへの同時書き込みが発生しなくなるので、
    Monitor や SyncLock などによる同期制御が不要で、Invoke だけで済むかと。
解決み!
違反を報告
引用返信
■35313 / ResNo.4)  Re[4]: DataGridViewの行ヘッダーに行番号を表示した時のエラー
□投稿者/ Aurea 一般人(1回)-(2023/01/04(Wed) 10:41:25)
  • アイコンコメントにあるものはもう試しましたか?最初のコメントは、実際に試してみればうまくいく可能性が高いと思います。私は自分でそれを実行しましたが、これまでのところ良い結果が得られました。これが、コードについて検討できるさまざまな状況が実際にたくさんあると言える理由です。それが私が最初に言えることであり、あなたと私は両方とも、現時点で私たち全員が検討できる選択肢がほとんどないことを知っています.今あなたがしなければならないことは、今のところ私たち全員が得ることができる最善の回答を考え出すことです.
違反を報告
引用返信

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



■記事リスト / ▲上のスレッド
■35204 / 親記事)  タッチキーボードでIMEを自動で切替えたい
□投稿者/ 炎の妖精さん 一般人(9回)-(2022/10/27(Thu) 15:59:00)
  • アイコン環境/言語:[Windows10(64bit)_VB.NET] 
    分類:[.NET] 

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

    此度はタッチキーボードを使用するにあたり、
    項目によって
    「半角(ImeMode:Off)」と「ひらがな(ImeMode:Hiragana)」に分けたいのですが、
    タッチキーボードではどのように処理すればよろしいのでしょうか?

    使用しているタブレットのタッチキーボードでは「ひらがな」として開くようになり、
    英数字で入れたい項目では毎度[半角/全角]キーを押下しなければいけません。
    その為、項目によって[半角][ひらがな]を切替えられるのかをご教授頂きたいです。

    ※タッチスクリーン
    c:\program files\common files\microsoft shared\ink\tabtip.exe
違反を報告
引用返信

▽[全レス6件(ResNo.2-6 表示)]
■35206 / ResNo.2)  Re[2]: タッチキーボードでIMEを自動で切替えたい
□投稿者/ 魔界の仮面弁士 大御所(1469回)-(2022/10/27(Thu) 17:38:06)
  • アイコンNo35205に追記(魔界の仮面弁士の記事)
    > 第二引数には System.Windows.Input 名前空間(参照設定:PresentationCore) の
    > InputScopeNameValue 列挙型を指定します。

    ただし InputScopeNameValue の定義範囲は -4〜47 の範囲に限られています。

    その範囲外で指定する場合は、Windows SDK を参照して、
    該当する InputScope の定数値を直接指定することになります。
    今回それが必要になるかは別として。


    ※50(IS_SEARCH) 以降は Windows 8 以降が対象
    ※52(IS_SEARCH_INCREMENTAL) 以降は Windows 10 以降が対象

     IS_ENUMSTRING = -5
     IS_XML = -4
      :
     IS_DEFAULT = 0
    IS_URL = 1
      :
     IS_HANJA = 47
     IS_HANGUL_HALFWIDTH = 48
      :
     IS_FORMULA_NUMBER = 67
     IS_CHAT_WITHOUT_EMOJI = 68

    https://learn.microsoft.com/ja-jp/windows/win32/api/inputscope/ne-inputscope-inputscope
    https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.input.inputscopenamevalue?view=netframework-4.8
違反を報告
引用返信
■35208 / ResNo.3)  Re[3]: タッチキーボードでIMEを自動で切替えたい
□投稿者/ 炎の妖精さん 一般人(11回)-(2022/10/28(Fri) 10:47:52)
  • アイコン魔界の仮面弁士様
    回答、ありがとうございます。

    確認させて頂きましたが、
    開発環境端末では目的通りの動作になりましたが、
    タブレット端末では「ひらがな」のままでした。

    第2引数のパラメータを変更して
    随時確認するしかないでしょうか?
    ※現在、指定している第2引数パラメータ
     AlphanumericHalfWidth(40):半角英数字のテキスト入力パターン
違反を報告
引用返信
■35209 / ResNo.4)  Re[4]: タッチキーボードでIMEを自動で切替えたい
□投稿者/ 魔界の仮面弁士 大御所(1470回)-(2022/10/28(Fri) 13:28:50)
  • アイコンNo35208に返信(炎の妖精さんさんの記事)
    > 開発環境端末では目的通りの動作になりましたが、
    > タブレット端末では「ひらがな」のままでした。

    入力項目ごとに、入力モードを動的に設定したいのですよね。

    OS 設定で [キーボードの詳細設定] を開いて、
    [アプリ ウィンドウごとに異なる入力方式を設定する]
    の設定が、両端末で同じになっているか確認してみてください。
違反を報告
引用返信
■35210 / ResNo.5)  Re[5]: タッチキーボードでIMEを自動で切替えたい
□投稿者/ 魔界の仮面弁士 大御所(1471回)-(2022/10/28(Fri) 13:39:18)
  • アイコンNo35209に追記(魔界の仮面弁士の記事)
    > [アプリ ウィンドウごとに異なる入力方式を設定する]

    場所としてはこのあたりです。この項目の On/Off で動作が変わりますか?
    https://iimemojp.com/inputcontrol/


    それ以外で関係しそうなところと言えば、Microsoft IME の設定画面にある
    「以前のバージョンの Microsoft IME を使う」の設定ぐらいかな…?
違反を報告
引用返信
■35211 / ResNo.6)  Re[6]: タッチキーボードでIMEを自動で切替えたい
□投稿者/ 炎の妖精さん 一般人(12回)-(2022/10/28(Fri) 14:02:06)
  • アイコン魔界の仮面弁士様
    回答、そしてご助言いただきありがとうございます。

    >OS 設定で [キーボードの詳細設定] を開いて、
    >[アプリ ウィンドウごとに異なる入力方式を設定する]
    >の設定が、両端末で同じになっているか確認してみてください。
    変更しましたが、変わらず[ひらがな]が表示されました。


    ※補足
     タッチキーボードのレイアウトを"通常のレイアウト"にしたことで
     項目によって[半角][ひらがな]を分けることが出来て、解決しました。
     今までは"標準キーボード"を選択していましたが、このレイアウトではどの項目に対しても[ひらがな]となっていました。
     目的が果たせましたので解決とさせていただきますm(_ _)m

    https://www.fmworld.net/cs/azbyclub/qanavi/jsp/qacontents.jsp?PID=4710-9922

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

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






Mode/  Pass/


- Child Tree -