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

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

記事リスト ( )内の数字はレス数
Nomalbitmapが保存できない(2) | Nomal特定ピクセルで画像を読み込みたい(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) | NomalDataGridViewの特定セルにボタンを配置する方法(5) |



■記事リスト / ▼下のスレッド
■35449 / 親記事)  Excelの数値 -> 日付みたいな関数?
□投稿者/ はな 一般人(1回)-(2023/06/11(Sun) 22:08:57)
  • アイコン環境/言語:[Windows10 .NET 6.0] 
    分類:[.NET] 

    毎度お世話になります。

    Excelで数値:0.020833 を セルの初期設定を(hh:mm)にすると「00:30:00」に
    なりますよね?
    これをC#でしたいのですが、TimeSpanを使用しても思うようにできません

    初歩的なことで申し訳ありませんが、ご指導願えませんでしょうか。


違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35450 / ResNo.1)  Re[1]: Excelの数値 -> 日付みたいな関数?
□投稿者/ Hongliang 大御所(642回)-(2023/06/12(Mon) 08:47:46)
  • アイコンDateTime.FromOADate(Double)
    で、1899/12/30からの経過日数をDateTime型に変換できます。
    ほぼExcelと同等ですが、61未満の間は日付にズレが生じます(Excelだと0が1900/1/0、60が1900/2/29という存在しない日付になります)。時刻部分は変わりません。
    // あとExcelには1904年から計算するというオプションもあるみたいですが…。

    そこからTimeSpanを取り出すには、以下のようにします。
    TimeSpan span = DateTime.FromOADate(...) - new DateTime(1899, 12, 30);

    あと、30分を意味する 1/48 は循環小数なので厳密には 0.020833333333... と3が無限に続きます。
    0.020833だと00:29:59.971...となって、
    Excelだとミリ秒以下を四捨五入して0:30:00と表示されますが、
    DateTime.FromOADateはミリ秒まで計算して29分59秒971扱いになります。
    DateTime.FromOADateに渡す値として0.02083333まで桁を伸ばすと正確な30分に変換されます。
違反を報告
引用返信
■35456 / ResNo.2)  Re[2]: Excelの数値 -> 日付みたいな関数?
□投稿者/ はな 一般人(2回)-(2023/06/12(Mon) 21:53:40)
  • アイコンNo35450に返信(Hongliangさんの記事)

    なるほど!できました。ありがとうございました。
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35437 / 親記事)  Drawstringでの透過文字作成
□投稿者/ はる 一般人(14回)-(2023/06/05(Mon) 10:56:56)
  • アイコン環境/言語:[Windows11 64bit .Net6.0 c#] 
    分類:[.NET] 

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

    https://dobon.net/vb/dotnet/graphics/alphabland.html
    を参考に透過の枠ないに透過文字を描画したいんですが、
    フォントサイズが小さくなると文字が透過になりません

    背景があるとフォントサイズか小さくても透過になります。
    背景は設定できないのでサイズが小さくても透過にする方法はありませんか?
    よろしくお願いします。

    添付の画像は
    一番上が68P
    真ん中が66P
    一番下が66P+背景あり
    です
304×283 => 250×232
イメージ
1685930216.jpg
/14KB
違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■35438 / ResNo.1)  Re[1]: Drawstringでの透過文字作成
□投稿者/ はる 一般人(15回)-(2023/06/05(Mon) 11:24:01)
  • アイコン追記です

    帳票作成時にコピー不可みたいに描画したいので
    背景は設定できないんです。()

    文言が条件によって変わるので画像をあらかじめ作成せずプログラムでてきないかとおもいまして。
違反を報告
引用返信
■35439 / ResNo.2)  Re[1]: Drawstringでの透過文字作成
□投稿者/ 魔界の仮面弁士 大御所(1548回)-(2023/06/05(Mon) 13:23:38)
  • アイコン
    No35437に返信(はるさんの記事)
    > フォントサイズが小さくなると文字が透過になりません
    ClearType フォントは LCD 前提のサブピクセルで
    スムージング処理が行われるため、この文脈だと
    ヒンティングに失敗してしまいます。
    
    事前に、AntiAliasGridFit もしくは
    AntiAlias を指定してください。
    
    CompositingQuality.HighQuality は背景がない場合は
    無意味ですが、背景ありのために残しておいても良いでしょう。
    
    Save / Restore はお好みで。
    
    using (var bmp = new Bitmap(280, 180))
    using (var g = Graphics.FromImage(bmp))
    using (var p = new Pen(Color.FromArgb(128, Color.Red), 12))
    using (var b = new SolidBrush(Color.FromArgb(128, Color.Yellow)))
    using (var f = new Font("Arial", 30))
    {
        g.Clear(Color.Empty);
        g.DrawRectangle(p, new Rectangle(10, 60, 260, 60));
        var state = g.Save();
        g.CompositingQuality = CompositingQuality.HighQuality;
        g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
        g.DrawString("DOBON.NET", f, b, 15f, 70f);
        g.Restore(state);
        bmp.Save(@"E:\dobon35437.png");
    }

280×180 => 250×160
イメージ
dobon35437.png
/3KB
違反を報告
引用返信
■35440 / ResNo.3)  Re[2]: Drawstringでの透過文字作成
□投稿者/ はる 一般人(16回)-(2023/06/05(Mon) 13:53:59)
  • アイコンNo35439に返信(魔界の仮面弁士さんの記事)
    > ■No35437に返信(はるさんの記事)


    できました!!
    ありがとうございます。
    お世話になりました。
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35433 / 親記事)  jumbo icon(256x256)が存在するか知る方法
□投稿者/ inunoshi 一般人(1回)-(2023/06/04(Sun) 20:10:12)
  • アイコン環境/言語:[.NET Framework] 
    分類:[.NET] 

    jumbo icon(256x256)の取得をしたいです。
    以下のコードで取得できますが、256x256アイコンを持ってないファイルの場合、
    以下の画像のように48x48アイコンが左上に描画された256x256アイコンが
    取得されていしまいます。
    256x256アイコンを持っていないことを知る方法はありませんでしょうか。
    IImageListを使って知る方法でもわかればありがたいですが、できればWindowsAPIを
    使って知る方法がわかればありがたいです。
    ご存じの方、ご教授ください。



    ---------------------------------------------------------
    //プログラムと同じフォルダに「C:\Windows\winhlp32.exe」の256x256アイコンを出力
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.IO;
    using System.Reflection;

    public class Icon256
    {
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct SHFILEINFO
    {
    public IntPtr hIcon;
    public int iIcon;
    public uint dwAttributes;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
    public string szDisplayName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
    public string szTypeName;
    }

    [DllImport("shell32.dll")]
    static extern int SHGetImageList(uint iImageList, ref Guid riid, out IntPtr ppv);

    [DllImport("comctl32.dll", SetLastError=true)]
    static extern bool ImageList_DrawEx(IntPtr himl, int i, IntPtr hdcDst, int x, int y, int dx, int dy, uint rgbBk, uint rgbFg, int fStyle);

    [DllImport("shell32.dll", EntryPoint = "SHGetFileInfoW", CharSet = CharSet.Unicode)]
    public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, out SHFILEINFO psfi, uint cbFileInfo, uint uFlags);

    public static void Main()
    {
    Bitmap iconImage = new Bitmap(256, 256);
    Guid IID_IImageList = new Guid("46EB5926-582E-4017-9FDF-E8998DAA0950");
    const uint SHIL_JUMBO = 0x0004;
    IntPtr pimgList;

    SHGetImageList(SHIL_JUMBO, ref IID_IImageList, out pimgList);

    uint SHGFI_ICON = 0x00000100;
    uint SHGFI_SYSICONINDEX = 0x00004000;
    uint SHGFI_OVERLAYINDEX = 0x00000040;
    uint vFlags = SHGFI_ICON | SHGFI_SYSICONINDEX | SHGFI_OVERLAYINDEX;

    SHFILEINFO shfi = new SHFILEINFO();
    SHGetFileInfo(@"C:\Windows\winhlp32.exe", 0, out shfi, (uint)Marshal.SizeOf(shfi), vFlags);

    Graphics g = Graphics.FromImage(iconImage);
    uint CLR_DEFAULT = 0xFF000000;
    ImageList_DrawEx(pimgList, shfi.iIcon & 0xFFFFFF, g.GetHdc(), 0, 0, 0, 0, CLR_DEFAULT, CLR_DEFAULT, 0);
    g.Dispose();

    string dstPathName = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + @"\testIcon256.png";
    iconImage.Save(dstPathName);
    }
    }

256×256 => 250×250
イメージ
testIcon256.png
/1KB
違反を報告
引用返信

▽[全レス6件(ResNo.2-6 表示)]
■35443 / ResNo.2)  Re[2]: jumbo icon(256x256)が存在するか知る方法
□投稿者/ inunoshi 一般人(4回)-(2023/06/05(Mon) 22:31:38)
  • アイコン魔界の仮面弁士様

    お忙しい中、お教えいただきありがとうございます。
    IconLib.dllの存在は知りませんでした。
    早速ダウンロードして動かしてみました。
    私の動かし方が悪いと思うのですが、「FirstOrDefault」のところで
    コンパイルエラーになってしまった(Win11標準のcsc.exeでコンパイル)ので
    初心者的なコードで恐縮ですが、以下のようにしたら256x256アイコンの取得ができました。
    256x256アイコンがない場合は何も出力されないことも確認できました。

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

    using System;

    public class Icon256
    {
      public static void Main()
      {
        string iconFilePath = @"C:\Windows\notepad.exe";

        var size = new System.Drawing.Size(256, 256);
        var multiIcon = new System.Drawing.IconLib.MultiIcon();
        multiIcon.Load(iconFilePath);
        
        foreach (var singleIcon in multiIcon){
          for(int i = 0; i < singleIcon.Count; i++){
            if(singleIcon[i].Size == size){
              var icon = singleIcon[i];

              if (icon != null)
              {
                string outName = string.Format(@"D:\{0}_256_{1}.ico",
                  System.IO.Path.GetFileNameWithoutExtension(iconFilePath),
                  singleIcon.Name
                );
                using (var sm = new System.IO.FileInfo(outName).Create())
                icon.Icon.Save(sm);
                return;
              }
            }
          }
        }
      }
    }
解決み!
違反を報告
引用返信
■35445 / ResNo.3)  Re[3]: jumbo icon(256x256)が存在するか知る方法
□投稿者/ 魔界の仮面弁士 大御所(1550回)-(2023/06/05(Mon) 22:56:31)
  • アイコンNo35443に返信(inunoshiさんの記事)
    >> using (var sm = new System.IO.FileInfo(outName).Create())
    >> using (icon)
    済みません、前回答のこの部分は
     using (icon)
     using (var sm = new System.IO.FileInfo(outName).Create())
    の書き間違いです。


    > IconLib.dllの存在は知りませんでした。
    私も知りませんでした。
    探せばあるだろうと検索しただけです。


    > 私の動かし方が悪いと思うのですが、「FirstOrDefault」のところで
    > コンパイルエラーになってしまった(Win11標準のcsc.exeでコンパイル)ので
    using System.Linq; を書き忘れていたのではないでしょうか?


    > 初心者的なコードで恐縮ですが、以下のようにしたら256x256アイコンの取得ができました。
    > 256x256アイコンがない場合は何も出力されないことも確認できました。
    色数の異なる複数の 256x256 アイコンが同時に収録されている可能性がある点にも注意してください。

    また、.exe / .dll / .icl の場合、別アイコンの 256x256 サイズ画像を
    含んでいる可能性もあります。


    > icon.Icon.Save(sm);
    保存後は再利用しないでしょうし、Dispose した方が良いかもしれません。

    まぁ、今回は static void Main 自体が直ちに終了するようにしているので、
    Dispose や using を使わずとも、プロセス終了と共に、
    リソースの処分も勝手に行われるでしょうけれどね。

解決み!
違反を報告
引用返信
■35446 / ResNo.4)  Re[4]: jumbo icon(256x256)が存在するか知る方法
□投稿者/ inunoshi 一般人(5回)-(2023/06/05(Mon) 23:41:58)
  • アイコン>> 私の動かし方が悪いと思うのですが、「FirstOrDefault」のところで
    >> コンパイルエラーになってしまった(Win11標準のcsc.exeでコンパイル)ので
    >using System.Linq; を書き忘れていたのではないでしょうか?

    実はいったん「using System.Linq」を入れてみたのですが、以下のエラーが出てしまったので
    あきらめてしまいました。
    Linqは使いこなせれば簡潔に書けて良いと思うのですが、まだまだ使いこなすのに時間かかりそうです。

    csc.exeでのコンパイル時のエラー(FirstOrDefaultの行で出ます)
     error CS1525: '.' は無効です。
     error CS1003: 構文エラーです。':' が必要です。

    >> 初心者的なコードで恐縮ですが、以下のようにしたら256x256アイコンの取得ができました。
    >> 256x256アイコンがない場合は何も出力されないことも確認できました。
    >色数の異なる複数の 256x256 アイコンが同時に収録されている可能性がある点にも注意してください。

    >また、.exe / .dll / .icl の場合、別アイコンの 256x256 サイズ画像を
    >含んでいる可能性もあります。

    ありがとうございます。
    いろいろなファイルで試してみるようにします。

    >> icon.Icon.Save(sm);
    >保存後は再利用しないでしょうし、Dispose した方が良いかもしれません。

    >まぁ、今回は static void Main 自体が直ちに終了するようにしているので、
    >Dispose や using を使わずとも、プロセス終了と共に、
    >リソースの処分も勝手に行われるでしょうけれどね。

    すみません。Mainをすぐに抜けるので手を抜いてしまいました。
    プログラムに組み込む際は後始末をちゃんとするようにします。
解決み!
違反を報告
引用返信
■35447 / ResNo.5)  Re[5]: jumbo icon(256x256)が存在するか知る方法
□投稿者/ 魔界の仮面弁士 大御所(1551回)-(2023/06/06(Tue) 09:42:21)
  • アイコン
    No35446に返信(inunoshiさんの記事)
    > csc.exeでのコンパイル時のエラー(FirstOrDefaultの行で出ます)
    >  error CS1525: '.' は無効です。
    >  error CS1003: 構文エラーです。':' が必要です。
    
    それは LINQ の問題では無いですね。
    エラー行とエラー列を再度確認してみてください。
    
    .FirstOrDefault(〜) が失敗しているのではなく、
    その後に続く ?.Icon の部分を解釈できていないのだと思います。
    
    
    ?.Icon 構文は「null 条件演算子」といって C#6 で追加された文法です。
    csc.exe のオプションに /langversion:6 を追加してみてください。
    https://ufcpp.net/study/csharp/ap_ver6.html#null-conditional
    
    
    現状は恐らく、
     C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
     C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
    を使っているのだと思いますが、これらは /langversion:5 までしか理解しませんので、
    Roslyn 世代の csc.exe を利用してください。
    
    なお、C# 6 以降に対応したコンパイラで /langversion:5 を指定した場合は、
      error CS1525: '.' は無効です。
      error CS1003: 構文エラーです。':' が必要です。
    ではなく、
      error CS8026: 機能 'Null を反映する演算子' は C# 5 では使用できません。6 以上の言語バージョンをお 使いください。
    というメッセージに変化するはずです。
    
    
    なお、
     var icon = singleIcon.FirstOrDefault(x => x.Size == size)?.Icon;
    という行を
     var iconImage = singleIcon.FirstOrDefault(x => x.Size == size);
     if (iconImage == null) { continue; }
     var icon = iconImage.Icon;
     if (icon == null) { continue; }
    に書き換えれば、文法レベルを C#3 相当まで下げることができます。

解決み!
違反を報告
引用返信
■35448 / ResNo.6)  Re[6]: jumbo icon(256x256)が存在するか知る方法
□投稿者/ inunoshi 一般人(6回)-(2023/06/06(Tue) 20:49:58)
  • アイコン本来の質問以外のところで文法の手ほどきまでしていただきありがとうございます。

    > それは LINQ の問題では無いですね。
    > エラー行とエラー列を再度確認してみてください。
    >
    > .FirstOrDefault(〜) が失敗しているのではなく、
    > その後に続く ?.Icon の部分を解釈できていないのだと思います。
    >
    >
    > ?.Icon 構文は「null 条件演算子」といって C#6 で追加された文法です。
    > csc.exe のオプションに /langversion:6 を追加してみてください。
    > https://ufcpp.net/study/csharp/ap_ver6.html#null-conditional
    > 現状は恐らく、
    >  C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
    >  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
    > を使っているのだと思いますが、これらは /langversion:5 までしか理解しませんので、
    > Roslyn 世代の csc.exe を利用してください。

    はい。
    csc.exeを以下のように使ってコンパイルしました。
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /nologo /t:exe icon256.cs /r:iconlib.dll
    諸事情により、Windows標準のコンパイラを使いたいのでC#5の仕様までで行きたいと思っています。
    ただ、自分ではC#6以上の文法で出たコンパイルエラーを理解するのはスキル不足でした。

    Roslynは初めて知ったので、検索等して自分で勉強してみます。
    手元の環境はVSCode+.NET7.0で開発。最終コンパイルはWin11標準のcsc.exe使用です。

    > なお、
    >  var icon = singleIcon.FirstOrDefault(x => x.Size == size)?.Icon;
    > という行を
    >  var iconImage = singleIcon.FirstOrDefault(x => x.Size == size);
    >  if (iconImage == null) { continue; }
    >  var icon = iconImage.Icon;
    >  if (icon == null) { continue; }
    > に書き換えれば、文法レベルを C#3 相当まで下げることができます。

    C#3相当に書き直していただいたコードまで作ってくださりありがとうございます。
    いただいた内容そのままですが、以下のコードで、Win11標準のcsc.exeでもコンパイルできました。

    ありがとうございました。
    本来の質問以外のところでも大変勉強になりました。

    --------------------------------------------------------------------------
    using System;
    using System.Linq;

    public class Icon256
    {
      public static void Main()
      {
        string iconFilePath = @"C:\Windows\notepad.exe";

        var size = new System.Drawing.Size(256, 256);
        var multiIcon = new System.Drawing.IconLib.MultiIcon();
        multiIcon.Load(iconFilePath);
        foreach (var singleIcon in multiIcon)
        {
          //var icon = singleIcon.FirstOrDefault(x => x.Size == size)?.Icon;
          var iconImage = singleIcon.FirstOrDefault(x => x.Size == size);
          if (iconImage == null) { continue; }
          var icon = iconImage.Icon;
          if (icon == null) { continue; }
     
          if (icon != null)
          {
            string outName = string.Format(@"D:\{0}_256_{1}.ico",
              System.IO.Path.GetFileNameWithoutExtension(iconFilePath),
              singleIcon.Name
            );
            using (icon)
            using (var sm = new System.IO.FileInfo(outName).Create())
            {
              icon.Save(sm);
            }
          }
        }
      }
    }

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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35430 / 親記事)  SpinWait()を使う理由
□投稿者/ Wan 付き人(79回)-(2023/05/31(Wed) 10:26:19)
  • アイコン環境/言語:[VisualBasic2019 Windows10 Basic Framework4.7.2] 
    分類:[.NET] 

    MicroSoftの解説に、次のようなコードが記載されています。
    
    https://learn.microsoft.com/ja-jp/dotnet/standard/parallel-programming/how-to-cancel-a-task-and-its-children
    
    この中に、次のように、SpinWait()を使っている部分があります。
    
    For i As Integer = 0 To maxIterations
      Dim sw As New SpinWait()
        For j As Integer = 0 To 100
          sw.SpinOnce()
        Next
      (・・・省略・・・)
    Next
    
    多分?少し時間稼ぎしているだけのように思えますが、ワザワザSpinWait()を使う理由ってありますか?Thread.Sleep()でもいいような?気がします。
    
    詳しい方、教えて頂けませんか?
    

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35431 / ResNo.1)  Re[1]: SpinWait()を使う理由
□投稿者/ Hongliang 大御所(641回)-(2023/05/31(Wed) 13:29:17)
  • アイコン' Do a bit of work. Not too much.
    とコメントにあるように、少しだけの仕事を表すダミーコードです。
    Sleep系の場合スレッドコンテキストの切り替えとかが起こるので、実際のアプリで書く「意味のあるコード」に対するサンプルコードとしての完全な代替にはなりません(完全な代替は必要ないというケースがほとんどですけども)。
違反を報告
引用返信
■35432 / ResNo.2)  Re[2]: SpinWait()を使う理由
□投稿者/ Wan 付き人(80回)-(2023/06/02(Fri) 17:36:13)
  • アイコン「スレッドコンテキストの切り替えとかが起こる」という部分など、私の理解できる
    を超えていますが、意味があって使われていることが判りました。

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

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

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



■記事リスト / ▲上のスレッド
■35426 / 親記事)  antecedentってなんですか?
□投稿者/ Wan 付き人(77回)-(2023/05/22(Mon) 08:37:08)
  • アイコン環境/言語:[VisualBasic2019 Windows10 Basic Framework4.7.2] 
    分類:[.NET] 

    MicroSoftの解説に、次のようなものがあります。
    「継続タスクを使用したタスクの連結」
    https://learn.microsoft.com/ja-jp/dotnet/standard/parallel-programming/chaining-tasks-by-using-continuation-tasks
    この中に、次のようなコードの記載があり、taskA.ContinueWith(Sub(antecedent)の部分で、ラムダ式にantecedentという引数が渡されています。
    しかし、Main()の中に、antecedentという変数は宣言されていません。
    どこから?発生したのでしょうか?
    Imports System.Threading.Tasks
    Module Example
    Public Sub Main()
          Dim taskA As Task(Of DayOfWeek) = Task.Run(Function() DateTime.Today.DayOfWeek)
          Dim continuation As Task = taskA.ContinueWith(Sub(antecedent)
                                                              Console.WriteLine("Today is {0}.", antecedent.Result)
                                                          End Sub)
          continuation.Wait()
        End Sub
    End Module
    VisalStudioにコピペして、「antecedent」の部分にカーソルを当てると、antecedent As Task(Of DayOfWeek)となっており、
    taskAを指しているようです。
    メソッドチェンの親を指すのでしょうか?
    
    詳しい方、宜しくお願い致します。
    

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35427 / ResNo.1)  Re[1]: antecedentってなんですか?
□投稿者/ Hongliang 大御所(640回)-(2023/05/22(Mon) 09:50:42)
  • アイコン
    そこはいわばメソッドの引数部分なので、変数が先行していないのは当然です。
    ラムダ式ではなく、メソッドとして独立させたら分かりやすいと思います。
    ラムダ式だとtaskAをキャプチャすればいいじゃん、となって、
    ContinueWithの引数として与えられる意味がよく分からなくなるでしょうしね。
    
    Sub Main()
        Dim taskA As Task(Of DayOfWeek) = Task.Run(Function() DateTime.Today.DayOfWeek)
        Dim continuation As Task = taskA.ContinueWith(AddressOf NextAction)
        continuation.Wait()
    End Sub
    
    Sub NextAction(ByVal antecedent As Task(Of DayOfWeek))
        Console.WriteLine("Today is {0}.", antecedent.Result)
    End Sub

違反を報告
引用返信
■35428 / ResNo.2)  Re[2]: antecedentってなんですか?
□投稿者/ Wan 付き人(78回)-(2023/05/23(Tue) 08:31:05)
  • アイコンHongliang様
    御指南ありがとうございます。
    デリゲートの理解不足が原因だと分かりました。
    今一度、勉強し直します。
    大変助かっております。ありがとうございます。
解決み!
違反を報告
引用返信

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






Mode/  Pass/


- Child Tree -