SyntaxHighlighter

2021-12-23

[C#][Windows] MessageBox中に改行処理

仕事メモです。

Windowsプログラミングによく使用するMessageBox。大量の内容を見せやすくするには改行が必要不可欠です。

いちいちCrLfを追加するのが面倒くさいので、より分かりやすくなる名前はC#内にあるようです。

Environment.NewLine

上記の意味ある内部変数を使ったらいいです。将来LinuxやMacに変更しても同じもので対応可能。通常のCrLfはWindowsのみであり、OSによる覚え間違いは減りますが、長い英単語を覚える方が逆に難しい…なんです。

2021-10-03

LeetCode 01: Two Sum

 長い間ウワサは聞いておりますが、初めて触りました。リートコード(LeetCode)という中国発のネットジャージシステム。一応自分が登録したのはアメリカサーバですけどね。

多分アルゴリズム上ではそこまで最適化していませんが、一応コードを記録しておくことに:


public class Solution {
    public int[] TwoSum(int[] nums, int target) {
            int index1=0;
            int index2=1;

            int maxindex = nums.Length;

            while (true)
            {
                int solution = nums[index1] + nums[index2];
                if (solution == target)
                {
                    int[] result = new int[] { index1, index2 };
                    return result;
                }

                index2++;

                if(index2 >= maxindex)
                {
                    index1++;
                    index2 = index1 + 1;
                }
            }
    }
}
            

2021-09-13

在多個專案中同時設定依賴專案版本

如果你像我在做Blazor的披薩工作坊時,執行build卻發生像下面的錯誤:

warning NU1604: Project dependency 'PackageA' (<= 9.0.0) does not contain an inclusive lower bound. Include a lower bound in the dependency version to ensure consistent restore results.

很好,第一步你找對地方了。這是一個msbuild的問題,也是這個工作坊內容的一個小問題。
這個專案中牽扯到了nuget包裝版本問題。而通常我們在github等上傳資料時,並不會包含nuget引用的封包(可以自己抓的就不要浪費網路流量啦)。

基本上專案用的方法並沒有錯,他只是少傳了一個檔案。在這個檔案中,我們可以將多個proj所需的最低版本放到同一個檔案中集中管理,這樣升級的時候就不需要一個一個去打開專案檔修改參考版本。

你所需要做的動作如下:
1. 在Solution檔案夾下放一個共通的檔案。如果你像我常常使用VSCode,那就是把檔案放在sln檔的同一個目錄中。在標準設定中,他會被叫做Directory.Build.props
2. 修改檔案內容,改成像下面這樣:
<Project>
<PropertyGroup Label="Package Dependencies">
<AspNetCoreVersion>5.0</AspNetCoreVersion>
<EntityFrameworkVersion>5.0</EntityFrameworkVersion>
<BlazorVersion>5.0</BlazorVersion>
<SystemNetHttpJsonVersion>5.0</SystemNetHttpJsonVersion>
</PropertyGroup>
</Project>
3. 如果你是用dotnet cli或是Visual Studio,恭喜你,你已經可以正常build了。
如果你不是使用標準build。那你就繼續做下一步。
4. 打開你的各個專案檔(就是那些csproj檔)。在<Project>的最上層添加下面這行
<import Project="..\Directory.Build.props" />
5. 結束。這樣應該又恢復正常了。未來有升級的時候,自己進去修改所需最低nuget的版本,看是要改成6.0還是什麼的,就看大家造詣了。

ref: https://github.com/dotnet-presentations/blazor-workshop

keyword: asp.net, dependencies.props, Directory.Build.props, .net core

2021-02-12

DataGridCheckBoxColumn動作模式變更

DataGridCheckBoxColumn裡的CheckBox,在預設狀態下,必須先點一次,Row取得focurs之後才能改變狀態。使用上不是很直覺,跟一般的CheckBox不太一樣。

背後的原因是因為DataGridCell本身有分成顯示用的ElementStyle跟編輯用的EditElementStyle兩種模式,為了做出區分,犧牲了CheckBox的直覺性。

可以依靠設定Style的方法,使操作更為直覺。

修改方式如下:

在各自的Style設定中(可以放在上位DataGrid的DataGrid.Resource裡),加入以下程式碼
<Style TargetType="CheckBox" x:Key="CheckBoxCellStyle" />

或是
<Style TargetType="CheckBox" x:Key="CellCheckBoxStyle"
       BasedOn="{StaticResource {x:Type CheckBox}}" />

然後就可以在DataGridCheckBoxColumn上設定我們所需的ElementStyle
<DataGridCheckBoxColumn Binding="{Binding Selected}"
                        ElementStyle="{StaticResource CheckBoxCellStyle}" />

做完以上的設定,指定的DataGridCheckBoxColumn裡面的CheckBox就會是我們常用的單點就會有反應的CheckBox了。

以上。

2020-10-09

SQL 改行コードの処理

SQL中に、改行コードはCHAR(13)あるいはCHAR(13)+CHAR(10)が該当します。 
それらを用いて保存すると、CSV出力やExcelにコピーする際にちょっと厄介です。

次のコードで、一括それら改行コードを削除できます。

UPDATE [TableName] SET [FieldName] = REPLACE([FieldName], CHAR(13) + CHAR(10), '') WHERE [FieldName] LIKE '%' + CHAR(13) + CHAR(10) + '%';
UPDATE [TableName] SET [FieldName] = REPLACE([FieldName], CHAR(13), '') WHERE [FieldName] LIKE '%' + CHAR(13) + '%';

人気の投稿