スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: スポンサー広告

文字列のあれこれ。

.NET1.1の頃にはあまりなかった文字列操作系のメソッド。そこらへんを共通系として自作したクラスやメソッドが補っていたんだけど、今や標準でサポートされるようになった。

○null或いは空文字かどうかを判定する
var result = string.IsNullOrEmpty(""); //true


○null或いは空文字、或いは半角スペースだけかを判定する。
var result = string.IsNullOrWhiteSpace("  "); //true


○大文字小文字を区別せずに比較する。
var result = string.Compare("strA", "STRA", true); //true


○文字列を特定の文字列で連結する。
var result = string.Join("/", "a", "b", "c");// a/b/c


○文字列を半角文字に変換する
var result = Microsoft.VisualBasic.Strings.StrConv(
"aaa", Microsoft.VisualBasic.VbStrConv.Narrow, 0);// aaa
※Microsoft.VisualBasic.dllを参照に追加する必要あり

.NETのバージョンに対する依存度を減らそうと思うなら、自作クラスのメソッドでラップする事である程度は減らせるので、相変わらず自作クラスを推奨している。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0

WCFで偶に梃子摺る。

WCF=Windows Communication Foundation
Web Serviceに代わるものとして出てきた…らしい。仕事では、WebServiceに代わる感じで開発している。

Windows Communication Foundation概説
どんなもん?こんなもんという記事。

さんざ調べて開発した(Orz)後で見つけたドキュメント(自習書)。
Windows Communication Foundation (WCF)

これはまだ読んでない
WCF Tutorial

何に梃子摺るってるか?というと、パフォーマンスだったり、設定だったりする。
そこらへんの話もおいおい書いていこうかな。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WCF | コメント: 0 | トラックバック: 0

ニュースあれこれ

Javaアップデートを装う不正プログラムが流通
メジャーになってきたと喜ぶべきなのか、物騒になってきたと思うべきか。ゼロデイ攻撃に対する修正もできたのだろうか?

Chrome マウスゼスチャーエクステンション(Smooth Gestures)はスパイウェアだった! どうしても使いたい人の為の対策版導入方法
ががーん!スパイウェアだったのか。長いこと使ってたよOrz。

アンダース氏が設計した新言語による次世代JavaScript開発とは?
TypeScriptの続報っぽい。まあ、手を出すのは当分先だ。

スマホ向けサイト制作の実装&使えるTips10選
近未来では、PCではなくタブレットやスマフォが主流になっている…かもしれない。
まあ、業務系の画面は、タブレットにすらおさまらない(項目だけで40くらいいくのもあるし)から、すべて置き換わる事はないだろうけど。予習、という意味で目を通すのもありか。

Google Driveの利用規約がヤバ過ぎる
読んでみたら、たしかにやばい。DropBoxの方が全然マシ。斬新というか、「ただより高くつく物はない」を体現したかのようなサービスだな。「脱Google」をそろそろ検討してもいいのか?

今年もWPFをメインに開発することになるのかもしれないが、まだわからない。
Webで開発をやるとしても、jQueryの勉強が先か。
IEのバージョンの多さを見ると、Web開発のメリットもそれほどなくなってきたなぁ。続きを読む
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WEB | コメント: 0 | トラックバック: 0

アコーディオンってやつだ

アコーディオンってのはこんな(↓)やつ
jQuery UI - アコーディオン

アコーディオンは、ヘッダーとコンテンツの複数のペアから成ります。ヘッダーをクリックするとそれに対応したコンテンツが表示され、同時に他のペアが折りたたまされて見えなくなります。

このアコーディオン、WPF Toolkitにはついてたのに、.NETの正式リリース時にはなぜか除外されてた。なぜだろ?Windows Applicationでは需要がなかったのだろうか?
これをどうにか再現できないか?と悩んで、結局はExpanderで再現しようと思った。
○STEP1
「Expanderを縦に並べる」ので、StackPanelが良いかとも思ったんだけど、StackPanelって、上に詰める動きなので、思うようなレイアウトにはなってくれない。なので、GridパネルにExpanderを並べる事にした。
<Window x:Class="TawamureDays.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Expander Header="Expander A" Background="LightBlue" IsExpanded="True">
<TextBlock Text="Text int Expander A"/>
</Expander>
<Expander Header="Expander B" Grid.Row="1" Background="LightPink" IsExpanded="False">
<TextBlock Text="Text int Expander B"/>
</Expander>
</Grid>
</Window>

Bをたたんでも、Aのサイズ(高さ)は変わらない。
20130121_1
まあ、RowDefinitionが1:1になっているからだろうけど。
Autoにしたらしたで、余計変になるし…。
20130121_2

○STEP2
あれこれやった結果、RowDefinitionのHeightは、

たたまれている方→Auto
開いている方→1*

が望ましいことがわかった。ただ、どれを開くかはユーザ次第で、開いたExpander以外をすべて閉じる必要がある。
まずは、Style.Triggerでやって見ることにした。
<Window x:Class="TawamureDays.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition>
<RowDefinition.Resources>
<Style TargetType="RowDefinition">
<Setter Property="Height" Value="*"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsExpanded, ElementName=ExpdA}" Value="False">
<Setter Property="Height" Value="Auto"/>
</DataTrigger>
</Style.Triggers>
</Style>
</RowDefinition.Resources>
</RowDefinition>
<RowDefinition>
<RowDefinition.Resources>
<Style TargetType="RowDefinition">
<Setter Property="Height" Value="*"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsExpanded, ElementName=ExpdB}" Value="False">
<Setter Property="Height" Value="Auto"/>
</DataTrigger>
</Style.Triggers>
</Style>
</RowDefinition.Resources>
</RowDefinition>
</Grid.RowDefinitions>
<Expander Header="Expander A" Background="LightBlue" x:Name="ExpdA">
<TextBlock Text="Text int Expander A"/>
</Expander>
<Expander Header="Expander B" Grid.Row="1" Background="LightPink" x:Name="ExpdB">
<TextBlock Text="Text int Expander B"/>
</Expander>
</Grid>
</Window>
これだととりあえず、手動でうまい具合に開閉してやれば、期待したようなレイアウトにはなってくれる。
20130121_3
でもこれだと、自動で開閉してくれないままだったりする。ヘッダーをクリックされたコンテンツ以外は、すべて自動で閉じてほしいわけで。

○STEP3
↓のように、IsExpandedプロパティをTriggerで切り替えてやればいいのかと思い、そういう設定を実装してみた。
        <Expander Header="Expander A" Background="LightBlue" x:Name="ExpdA">
<Expander.Resources>
<Style TargetType="Expander">
<Style.Triggers>
<DataTrigger Binding="{Binding IsExpanded, ElementName=ExpdB}" Value="True">
<Setter Property="IsExpanded" Value="False"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsExpanded, ElementName=ExpdB}" Value="False">
<Setter Property="IsExpanded" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Expander.Resources>
<TextBlock Text="Text int Expander A"/>
</Expander>
<Expander Header="Expander B" Grid.Row="1" Background="LightPink" x:Name="ExpdB">
<Expander.Resources>
<Style TargetType="Expander">
<Style.Triggers>
<DataTrigger Binding="{Binding IsExpanded, ElementName=ExpdA}" Value="True">
<Setter Property="IsExpanded" Value="False"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsExpanded, ElementName=ExpdA}" Value="False">
<Setter Property="IsExpanded" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Expander.Resources>
<TextBlock Text="Text int Expander B"/>
</Expander>
※Expanderの部分だけを抜粋している。
Aが開かれたら、Bを閉じる。Bが開かれたらAを閉じる。のつもりだったんだけど、これは正常に動作しない。Aを開いても、Bは閉じてくれない。IsExpandedプロパティは、ユーザの手動による開閉には連動しているけど、IsExpandedをFalseに設定したからと言って、閉じてくれるわけではないらしい。さすがにこれが駄目だと、ControlTemplateの組み直しか、EventTrigger系に踏み切るかしかなさそうなんだけど。更に調べたら、良い記事があった。
WPF: Multiple Expander have to collapse if ONE is expanded
ViewModel側との連携は必要となるけど、やりたいことはできる感じかな。続きを読む
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0

constとstatic readonlyの違い(補足)。

constとstatic readonlyの違い。の補足。

・constは、メソッド内にも定義できる。staticはできない。
 constは埋め込みだからね。

・staticな変数は、基本、上からロードされていく。
 static変数は、定義クラスが参照された時に、先頭から順にロードされていく。
namesapce TawamureDays {
class Program {

/// <summary>定数A+B</summary>
static readonly string CONSTANT_A_AND_B = CONSTANT_A + "_B";

/// <summary>定数A</summary>
static readonly string CONSTANT_A = "A";

static void Main(string[] args) {
Console.WriteLine(CONSTANT_A);
Console.WriteLine(CONSTANT_A_AND_B);
Console.ReadKey(true);
return;
}
}
}

この実行結果は、

A
_B

となる。順序を逆にして定義し直す。
namesapce TawamureDays {
class Program {

/// <summary>定数A</summary>
static readonly string CONSTANT_A = "A";

/// <summary>定数A+B</summary>
static readonly string CONSTANT_A_AND_B = CONSTANT_A + "_B";

static void Main(string[] args) {
Console.WriteLine(CONSTANT_A);
Console.WriteLine(CONSTANT_A_AND_B);
Console.ReadKey(true);
return;
}
}
}

この実行結果は、

A
A_B

となる。
続きを読む
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0

一時ファイルの名前を考えたくない時

ロジックの中で、一時的にファイルを保存したい時、そのファイル名、パスをどこにするか決める必要がある。パスもそうだけど、ファイル名を考えるのがめんどくさい。
仕事では、「社員番号+時間(秒まで)」だろうか。
まあ、それでも良いんだけど、標準でサポートされてたりする。

//一時ファイルを保存するフォルダパス
var tmpPath = System.IO.Path.GetTempPath();
//一時ファイルの名前
var tmpFile = System.IO.Path.GetTempFileName();

・GetTempFileName()は、フルパスで得られるので、そのまま使える。
・GetTempPath()だと、フォルダパスになる(名前はまた別に決めたい時はこれか)。
・GetTempFileName()を呼び出すたびに異なる名前を取得する。
・拡張子は「tmp」で固定となる。
Windows7以降になって、ProgramFiles以下のセキュリティが厳しくなっていたりする。手っ取り早く一時保管先を決めたり、ファイルをコピーする際の一時保管先にも良いかもしれない。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0

サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。