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

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

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



■記事リスト / ▼下のスレッド
■35411 / 親記事)  テーブルを順番通りに直すプログラムを外部で読み込めるようにしたいです。
□投稿者/ えっぴ〜 一般人(3回)-(2023/05/10(Wed) 18:37:42)
  • アイコン環境/言語:[javascript] 
    分類:[その他] 

    テーブルを順番通りに直すプログラムを外部で読み込めるようにしたいです。
    //本文
    <table id="sort_table">
    <tr>
    <th>No</th>
    <th>全角項目</th>
    <th>数値項目</th>
    <th>カンマ</th>
    </tr>
    <tr><td>1</td><td>かきくけこ</td><td>1</td><td>1,000</td></tr>
    <tr><td>2</td><td>さしすせそ</td><td>10</td><td>10,000</td></tr>
    <tr><td>3</td><td>あいうえお</td><td>100</td><td>2,000</td></tr>
    <tr><td>4</td><td>カキクケコ</td><td>2001</td><td>3,000</td></tr>
    <tr><td>5</td><td>アイウエオ</td><td>2002</td><td>20,000</td></tr>
    <tr><td>6</td><td>サシスセソ</td><td>2003</td><td>11,000</td></tr>
    <tr><td>7</td><td>一丁目</td><td>1.234</td><td>12,000</td></tr>
    <tr><td>8</td><td>二丁目</td><td>12.34</td><td>30,000</td></tr>
    <tr><td>9</td><td>三丁目</td><td>123.4</td><td>31,000</td></tr>
    <tr><td>10</td><td>1丁目</td><td>0.001</td><td>32,000</td></tr>
    <tr><td>11</td><td>2丁目</td><td>0.002</td><td>400,000</td></tr>
    <tr><td>12</td><td>3丁目</td><td>0.003</td><td>50</td></tr>
    </table>

    <style>
    #sort_table {
    border-collapse:collapse;
    }
    #sort_table td {
    border:1px solid lightgray;
    }
    #sort_table th {
    cursor:pointer;
    background-color:lightgray;
    }
    </style>
    //javascript
    <script>
    window.addEventListener('load', function () {
    let column_no = 0; //今回クリックされた列番号
    let column_no_prev = 0; //前回クリックされた列番号
    document.querySelectorAll('#sort_table th').forEach(elm => {
    elm.onclick = function () {
    column_no = this.cellIndex; //クリックされた列番号
    let table = this.parentNode.parentNode.parentNode;
    let sortType = 0; //0:数値 1:文字
    let sortArray = new Array; //クリックした列のデータを全て格納する配列
    for (let r = 1; r < table.rows.length; r++) {
    //行番号と値を配列に格納
    let column = new Object;
    column.row = table.rows[r];
    column.value = table.rows[r].cells[column_no].textContent;
    sortArray.push(column);
    //数値判定
    if (isNaN(Number(column.value))) {
    sortType = 1; //値が数値変換できなかった場合は文字列ソート
    }
    }
    if (sortType == 0) { //数値ソート
    if (column_no_prev == column_no) { //同じ列が2回クリックされた場合は降順ソート
    sortArray.sort(compareNumberDesc);
    } else {
    sortArray.sort(compareNumber);
    }
    } else { //文字列ソート
    if (column_no_prev == column_no) { //同じ列が2回クリックされた場合は降順ソート
    sortArray.sort(compareStringDesc);
    } else {
    sortArray.sort(compareString);
    }
    }
    //ソート後のTRオブジェクトを順番にtbodyへ追加(移動)
    let tbody = this.parentNode.parentNode;
    for (let i = 0; i < sortArray.length; i++) {
    tbody.appendChild(sortArray[i].row);
    }
    //昇順/降順ソート切り替えのために列番号を保存
    if (column_no_prev == column_no) {
    column_no_prev = -1; //降順ソート
    } else {
    column_no_prev = column_no;
    }
    };
    });
    });
    //数値ソート(昇順)
    function compareNumber(a, b)
    {
    return a.value - b.value;
    }
    //数値ソート(降順)
    function compareNumberDesc(a, b)
    {
    return b.value - a.value;
    }
    //文字列ソート(昇順)
    function compareString(a, b) {
    if (a.value < b.value) {
    return -1;
    } else {
    return 1;
    }
    return 0;
    }
    //文字列ソート(降順)
    function compareStringDesc(a, b) {
    if (a.value > b.value) {
    return -1;
    } else {
    return 1;
    }
    return 0;
    }
    </script>
    let、var、constはfunctionの中で使うと、ローカル変数となってしまいます。
    グローバル変数にするにはどのようにしたらよいのでしょうか。
    しかし、let table、let tbodyに対応する関数がございません。
    もう八方塞がりです。
    jsの部分のみご記述ください。
違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■35412 / ResNo.1)  Re[1]: テーブルを順番通りに直すプログラムを外部で読み込めるようにしたいです。
□投稿者/ 魔界の仮面弁士 大御所(1543回)-(2023/05/10(Wed) 20:51:16)
  • アイコン
    No35411に返信(えっぴ〜さんの記事)
    > テーブルを順番通りに直すプログラムを外部で読み込めるようにしたいです。
    質問の意図を理解しきれていないのですが、処理を外部から呼びたいなら、
    その処理を Global スコープの function として用意すれば良いのでは?
    https://developer.mozilla.org/ja/docs/Glossary/Global_object

    現行の実装のままソートを呼び出したいということなら
    document.getElementById('sort_table').tBodies[0].rows[0].cells[3].click();
    などを呼び出すという手があります。

    変数 column_no や column_no_prev の値を読み取りたいという話なら
    それらの変数をイベントリスナーの外側で宣言するなどすればよいわけで。


    > </style>
    > //javascript
    > <script>

    <!-- javascript -->
    にしなくて良いのですか?


    > //文字列ソート(昇順)
    > function compareString(a, b) {
    > //文字列ソート(降順)
    > function compareStringDesc(a, b) {
    このいずれも、実装が明らかにおかしいような…。
    このケースだと、return 0 には絶対に到達しませんよね?
    +1 , 0 , -1 の三値を返したいなら、else if を使うべきかと。

違反を報告
引用返信
■35413 / ResNo.2)  Re[2]: テーブルを順番通りに直すプログラムを外部で読み込めるようにしたいです。
□投稿者/ 書き換えようにも構文が複雑すぎて。 一般人(1回)-(2023/05/11(Thu) 07:20:13)
  • アイコンその処理を Global スコープの function として用意すれば良いのでは?→
    今のjavascriptの関数だと、書き換えようにも構文が複雑すぎて、
    https://developer.mozilla.org/ja/docs/Glossary/Global_object
    のページでは、全然理解ができません。
    後、書き換えた内容をここにご記入いただければ幸いです。
違反を報告
引用返信
■35414 / ResNo.3)  Re[3]: テーブルを順番通りに直すプログラムを外部で読み込めるようにしたいです。
□投稿者/ 書き換えようにも構文が複雑すぎて。 一般人(2回)-(2023/05/11(Thu) 08:05:27)
  • アイコンその処理を Global スコープの function として用意すれば良いのでは?→
    今のjavascriptの関数だと、書き換えようにも構文が複雑すぎて、
    https://developer.mozilla.org/ja/docs/Glossary/Global_object
    のページでは、全然理解ができません。
    後、書き換えた内容をここにご記入いただければ幸いです。
    もし、cssだけで実装可能な場合は、その旨をご教授の上、
    cssの記述全文をお書きください。
違反を報告
引用返信
■35415 / ResNo.4)  Re[4]: テーブルを順番通りに直すプログラムを外部で読み込めるようにしたいです。
□投稿者/ 無理ゲーなのがわかりました。 一般人(1回)-(2023/05/11(Thu) 12:50:51)
  • アイコン無理ゲーなのがわかりました。
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35384 / 親記事)  ソケット通信入門 ひらがな
□投稿者/ ぬるい親父 一般人(1回)-(2023/02/14(Tue) 14:24:24)
  • アイコン環境/言語:[Windows10 VB.Net 2022] 
    分類:[.NET] 

    こんいちは

    ソケット通信の勉強をしています

    https://dobon.net/vb/dotnet/internet/tcpclientserver.html#section4

    このURLのクライアント作成の部分に付いて教えて頂けますでしょうか?

    仮にですが16進の1234Hを送る場合ですが変数sendMsgを"&H1234"にすれば良いのでしょうか?

    Dim sendBytes As Byte() = enc.GetBytes(sendMsg & ControlChars.Lf)

    Dim sendBytes As Byte() = enc.GetBytes("&H1234" & ControlChars.Lf)
    へ書き換える

    よろしくお願いします



違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■35385 / ResNo.1)  Re[1]: ソケット通信入門 ひらがな
□投稿者/ 魔界の仮面弁士 大御所(1536回)-(2023/02/14(Tue) 16:51:28)
  • アイコンNo35384に返信(ぬるい親父さんの記事)
    > ソケット通信の勉強をしています
    タイトルにある「ひらがな」とは何のことですか?

    > 仮にですが16進の1234Hを送る場合ですが変数sendMsgを"&H1234"にすれば良いのでしょうか?
    文字列比較ではなくバイナリを送りたい、ということでしょうか。

    エンディアンにもよりますが、

    Dim sendBytes As Byte() = {&H34, &H12}
    Dim sendBytes As Byte() = BitConverter.GetBytes(&H1234US)

    Dim sendBytes As Byte() = {&H12, &H34}
    Dim sendBytes As Byte() = BitConverter.GetBytes(&H3412US)

    でどうでしょう。

    末尾LFも送出したいなら
    = {&H34, &H12, &HA}
    = {&H12, &H34, &HA}
    とか。
違反を報告
引用返信
■35386 / ResNo.2)  Re[2]: ソケット通信入門 ひらがな
□投稿者/ 魔界の仮面弁士 大御所(1537回)-(2023/02/14(Tue) 16:58:17)
  • アイコンNo35385に追記(魔界の仮面弁士の記事)
    >>ソケット通信の勉強をしています
    > タイトルにある「ひらがな」とは何のことですか?

    そうか、元のタイトルだと
    掲示板の投稿ルールに抵触すると…。

    「タイトルとコメントには、必ずひらがなを入れてください。これには、スパム対策の意味もあります。」
違反を報告
引用返信
■35387 / ResNo.3)  Re[2]: ソケット通信入門 ひらがな
□投稿者/ ぬるい親父 一般人(2回)-(2023/02/14(Tue) 18:47:05)
  • アイコン魔界の仮面弁士さんありがとうございます

    試してみます

    ひらがなの件制約でした。

違反を報告
引用返信
■35388 / ResNo.4)  Re[2]: ソケット通信入門 ひらがな
□投稿者/ ぬるい親父 一般人(3回)-(2023/02/16(Thu) 15:24:22)
  • アイコンバイナリ送信送信は無事出来たのですが
    今度は2バイトのバイナリ受信にトライしてます

    考え方はどうすればよいでしょ?
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35368 / 親記事)  時間変数(文字列)の扱い
□投稿者/ ま〜 付き人(57回)-(2023/02/07(Tue) 20:11:18)
  • アイコン環境/言語:[Vs20022 VB] 
    分類:[.NET] 

    いつもお世話になります

    レベルの低い内容ですが
    昔ならこんな感じの事が出来た気がしたんで書いてみましたが

    If Now.ToString("HH:mm") = CStr(DateTimePicker1.ToString("HH:mm")) Then ・・・・

    String=DateTimePicker1.ToString("HH:mm")


    結果は難しい様で
    "String ""HH:mm"" から型 'Integer' への変換は無効です。"
    とエラーとなります

    色々やってるな中で変換の種類によってエラーが変わるのですが
    今回、どうしてInteger扱いになるのか理解出来ずに苦しんでます。

    アドバイスお願いします。
違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■35369 / ResNo.1)  Re[1]: 時間変数(文字列)の扱い
□投稿者/ 魔界の仮面弁士 大御所(1533回)-(2023/02/07(Tue) 21:02:32)
  • アイコンNo35368に返信(ま〜さんの記事)
    > いつもお世話になります
    投稿時に、いろいろと転記ミスをしていませんか?


    > If Now.ToString("HH:mm") = CStr(DateTimePicker1.ToString("HH:mm")) Then ・・・・
    えぇと、
     = CStr(〜.ToString("HH:mm"))

     = 〜.ToString("HH:mm")
    と同義ですよ。文字列を文字列に変換しても無意味かと…。


    それと、DateTimePicker から入力された日付は、
    Value プロパティで取得されます。すなわち
     = DateTimePicker1.ToString("HH:mm")
    ではなく
     = DateTimePicker1.Value.ToString("HH:mm")
    とすべきです。

    とはいえ、DateTimePicker1 の ToString メソッドには
    引数を受け取るオーバーロードは無かったはずなので、本当にその表記なら
    > "String ""HH:mm"" から型 'Integer' への変換は無効です。"
    なエラーではなく、
    「BC30516 この引数の数を受け付ける 'ToString' がないため、オーバーロードの解決に失敗しました。」
    のコンパイルエラーになっているはずですが…?


    なお、書式文字列 ":" はカルチャー依存であり、
    コントロール パネルの設定によっては、
    変換結果が ":" 以外の文字になることがあります。

    カルチャーに依存することなく、常に ":" で返されるようにしたい場合は、
    "HH:mm" の代わりに "HH\:mm" 構文を使います。
    ("HH" や "mm" は、カルチャーに依存しません)

    もっとも、時刻区切りが ":" 以外に設定されているなんてことは
    日本語環境ではまず無いでしょうけれどね。


    > String=DateTimePicker1.ToString("HH:mm")
    String は予約語なので、「String という名前の変数」は作れません。

    予約語を変数名にしたい場合は、
    Dim [String] As String
    のように、角括弧で囲ってエスケープしてください。


    > 結果は難しい様で
    > "String ""HH:mm"" から型 'Integer' への変換は無効です。"
    > とエラーとなります
    コンパイル時エラーではなく、実行時エラーなのですよね?
    (おそらく、Option Strict Off モードでコンパイルしているはず)

    そのエラーが出るケースとして、以下の 2 パターンが想定されます。

    (1) 代入式の左辺が Integer 型の変数やプロパティで、右辺が文字列 "HH:mm" の時
     Dim jikan As Integer = "HH:mm"
     'Dim jikan As Integer = DateTimePicker1.Value.Hour.ToString("HH:mm")

    (2) Integer 型の引数を受け取るメソッドに、"HH:mm" という文字列引数を渡してた時
     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Test("HH:mm")
     End Sub
     Sub Test(hhmm As Integer)
     End Sub
違反を報告
引用返信
■35370 / ResNo.2)  Re[2]: 時間変数(文字列)の扱い
□投稿者/ ま〜 付き人(58回)-(2023/02/09(Thu) 13:17:30)
  • アイコンいつもありがとうございます
    また、棚ぼたで知識がはいりました。

    > 投稿時に、いろいろと転記ミスをしていませんか?

    ミスに近いかもです。伝えやすい様に Stringは文字列ですと表現したかった感じです。いらぬお手数お掛けしましてすみません 


    >  = DateTimePicker1.Value.ToString("HH:mm")

    ★これでした。Valueが必要でした。


    > 「BC30516 この引数の数を受け付ける 'ToString' がないため、オーバーロードの解決に失敗しました。」
    > のコンパイルエラーになっているはずですが…?

    実行時にその行に来た時にエラーとなっていました


    > (1) 代入式の左辺が Integer 型の変数やプロパティで、右辺が文字列 "HH:mm" の時
    >  Dim jikan As Integer = "HH:mm"
    >  'Dim jikan As Integer = DateTimePicker1.Value.Hour.ToString("HH:mm")
    >
    > (2) Integer 型の引数を受け取るメソッドに、"HH:mm" という文字列引数を渡してた時
    >  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    >   Test("HH:mm")
    >  End Sub
    >  Sub Test(hhmm As Integer)
    >  End Sub

    これ勉強になりました。
    ありがとうございます。

解決み!
違反を報告
引用返信
■35371 / ResNo.3)  Re[3]: 時間変数(文字列)の扱い
□投稿者/ 魔界の仮面弁士 大御所(1534回)-(2023/02/09(Thu) 14:36:13)
  • アイコンNo35370に返信(ま〜さんの記事)
    >> = DateTimePicker1.Value.ToString("HH:mm")
    > ★これでした。Valueが必要でした。
    >>「BC30516 この引数の数を受け付ける 'ToString' がないため、オーバーロードの解決に失敗しました。」
    >>のコンパイルエラーになっているはずですが…?
    > 実行時にその行に来た時にエラーとなっていました

    あー…状況理解。

    今回の場合、
     Dim s1 As String = DateTimePicker1.Value.ToString("HH:mm")
    と書くべきところを、間違えて、
     Dim s2 As String = DateTimePicker1.ToString("HH:mm")
    と書いていたわけですよね。


    DateTimePicker の ToString メソッドは、引数を持つオーバーロードが
    無いにも関わらず、BC30516 が発生しなかった理由は、
     Dim s As String = DateTimePicker1.ToString("HH:mm")
    というコードが、
     Dim s As String = CStr(DateTimePicker1.ToString().Chars(CInt("HH:mm")))
    の意味で、コンパイラに解釈されていたためです。


    Option Strict Off の弊害ですね…。
    Option Strict On でコンパイルが通るコードを目指すことをお奨めします。
    そうすれば、実行前にコーディングミスに気付けるはず!

    ----
    まず、元のコードはこれでした。
     s = DateTimePicker1.ToString("HH:mm")

    しかし、ToString には引数を受け取るオーバーロードが無いため、
    「引数の無いメソッド呼び出しは括弧を省略できる」というルールにより、
     s = DateTimePicker1.ToString()("HH:mm")
    の意味に解釈されます。

    そしてこれは要するに、
     s = DateTimePicker1.ToString().Chars("HH:mm")
    の呼び出しを意味します。

    つまり ("HH:mm") 部分は、「ToString メソッドの引数」ではなく、
    「String 型の既定のプロパティ(いわゆるインデクサ)の引数」と
    解釈されていたわけです。

    しかし、String のインデクサに渡せる引数は Integer 値だけです。

    Option Strict On であれば、この時点でコンパイルエラー
     BC30512『Option Strict On では 'String' から 'Integer' への暗黙的な変換は許可されていません。』
    が発生するので、すぐに気づくことができますが、
    Option Strict Off では検出してもらえません。

    そのため、実行した時点でようやく、
     System.InvalidCastException:
     String "HH:mm" から型 'Integer' への変換は無効です。
    のエラーが発生していた…というわけです。


    Dim v1 = DateTimePicker1.ToString() 'v1 は String 型となる
    Dim v2 = DateTimePicker1.ToString()(0) 'v2 は Char 型となる
解決み!
違反を報告
引用返信
■35375 / ResNo.4)  Re[4]: 時間変数(文字列)の扱い
□投稿者/ ま〜 付き人(59回)-(2023/02/10(Fri) 15:52:31)
  • アイコン変数の件
    ありがとうございます。
    Option Strict Onは知りませんでした。(これが私のレベルなのかも?
    ?)
    また2つ学びました


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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■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]



■記事リスト / ▲上のスレッド
■35332 / 親記事)  フォームのリサイズ時にDataGridViewが再描画されない
□投稿者/ saku 一般人(6回)-(2023/01/17(Tue) 11:11:25)
  • アイコン環境/言語:[C#] 
    分類:[.NET] 

    皆さまお世話になります。

    フォーム上に、DataGridViewを配置し、AnchorはTop,Bottom,Left,Rightにしています。データ読み込み後、フォームをドラッグや最大化したときにDataGridView自体はフォームに合わせてサイズは変わるものの、データを表示している部分が再描画してくれません。(This.DataGridView1.Reflesh)

    こういったときはRefleshではなく、他に書き方があるのでしょうか?

    (リサイズ後に、編集中の項目がある場合には操作を全て覚えておいて再読み込みをした後に、順番に処理していく位しか思い浮かびませんでした。)

    皆さまはこういった場面では、どのようにプログラミングしているのでしょうか?
    ヒントだけでもいただければ大変助かります。

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

▽[全レス4件(ResNo.1-4 表示)]
■35333 / ResNo.1)  Re[1]: フォームのリサイズ時にDataGridViewが再描画されない
□投稿者/ KOZ 一般人(17回)-(2023/01/17(Tue) 11:44:54)
  • アイコンNo35332に返信(sakuさんの記事)

    DataGridView はリサイズすると OnResize メソッドで Invalidate() が実行され再描画されるので、特にコードを書く必要はありません。

    DataGridView.OnResize
    https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/DataGridViewMethods.cs,6dfca71975a9ba17

    「データを表示している部分が再描画してくれません。」とはどのような状態でしょうか?
違反を報告
引用返信
■35334 / ResNo.2)  Re[1]: フォームのリサイズ時にDataGridViewが再描画されない
□投稿者/ 魔界の仮面弁士 大御所(1520回)-(2023/01/17(Tue) 11:47:30)
  • アイコンNo35332に返信(sakuさんの記事)
    > This.DataGridView1.Reflesh
    This → this では?
    DataGridView1 → dataGridView1 では?
    Reflesh → Refresh では?

    ※ fresh:新鮮な
    ※ flesh:肉


    > データを表示している部分が再描画してくれません。
    CellPaiting イベントなどの、何か追加の処理を書いていたりしますか?
    現象を再現可能な、最小実験用のプロジェクトをどこかにアップロードしていただくか、
    あるいは .zip で添付してもらえないでしょうか。
    (サイズを抑えるため、bin や obj などは含めないでください)

    手元の環境で、Form 上に DataGridView を直接貼ったうえで
    下記を試しましたが、事象を再現できませんでした。
    (.NET Framework 4.8.1 および .NET Framework 3.5 で確認)


    var dt = new DataTable();
    for(int i = 1; i <= 15; i++)
    {
      dt.Columns.Add("Col" + i, typeof(int));
    }
    for (int r = 100; r < 200; r++)
    {
      dt.Rows.Add(Enumerable.Range(r + 1, 15).Cast<object>().ToArray());
    }
    dt.AcceptChanges();
    dataGridView1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
    dataGridView1.Columns.Clear();
    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = dt;
違反を報告
引用返信
■35335 / ResNo.3)  Re[2]: フォームのリサイズ時にDataGridViewが再描画されない
□投稿者/ saku 一般人(8回)-(2023/01/17(Tue) 13:04:28)
  • アイコン早々のご回答ありがとうございました。
    今回は、既にあるシステム内にDataGridViewのコントロールが既にあり、
    それを継承して使用していました。


    再描画されない状態なのですが、
    フォームの真ん中にDataGridViewを配置、その下にボタンがついています。
    フォームを下にドラッグして、DataGridViewの表示できる行を増やしたところ、
    下に広げた部分は前の表示が残ってしまいます。

    ※外に出せないため、その再描画されない状態だけ画像を添付します。

    説明が下手くそですいません。

    継承したコントロールに問題があるのかもしれません。
    そこだけのプロジェクト作って検証してみます。

    ありがとうございました。



    No35333に返信(KOZさんの記事)
    > ■No35332に返信(sakuさんの記事)
    >
    > DataGridView はリサイズすると OnResize メソッドで Invalidate() が実行され再描画されるので、特にコードを書く必要はありません。
    >
    > DataGridView.OnResize
    > https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/DataGridViewMethods.cs,6dfca71975a9ba17
    >
    > 「データを表示している部分が再描画してくれません。」とはどのような状態でしょうか?
992×315 => 250×79
イメージ
g1117.png
/13KB
違反を報告
引用返信
■35337 / ResNo.4)  Re[3]: フォームのリサイズ時にDataGridViewが再描画されない
□投稿者/ saku 一般人(11回)-(2023/01/17(Tue) 20:16:44)
  • アイコンその後、システム内のプログラムを見直してみました。

    継承コントロールの方でバグが見つかりました。(SuspendLayout、ResumeLayoutの設置位置と削除し忘れ)
    それが原因だったようで、バグ修正後は正しく動くようになりました。

    お手数をおかけしました。
    解決済みとさせていただいます。

    皆さまのご返答で解決の糸口になったこと、感謝します。
    ありがとうございました。
解決み!
違反を報告
引用返信

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






Mode/  Pass/


- Child Tree -