.NET

Q103. WPF で未処理例外に対応するには?

A.DispatcherUnhandledException イベントを使用します。以下サンプルです。未処理例外情報をイベントログに保存します。 なお DispatcherUnhandledException イベントだけだとUIスレッドの未処理例外しか捕捉できません。UIスレッド以外の未処理例外も捕捉…

Q102. ListBox で一行おきに背景色を変えるには?

A.StyleSelector を使用します。以下サンプルです。奇数行と偶数行で背景色を設定します。 まず StyleSelector を継承したクラスを作成し、奇数行・偶数行のスタイルを保持するようプロパティを設けます。そして SelectStyle メソッドをオーバーライドし、…

Q101. ListBoxItem で子要素の編集時に強調表示するには?

A.IsKeyboardFocusWithin プロパティが True の場合、IsSelected プロパティを true にするよう、ListBoxItem のスタイルにトリガーを設定します。DataTemplate で ListBoxItem に TextBox などの編集用コントロールを設けた場合、子要素の TextBox にフォ…

Q100. リストボックスの選択行の背景色を変更するには?

A.SystemColors.HighlightBrushKey を上書きします。以下のサンプルでは選択行の背景色を赤に変更しています。また SystemColors.ControlBrushKey を上書きすると、リストボックスのフォーカスが外れても選択行の強調表示を保持することが出来ます。 <ListBox ItemsSource="{Binding Persons}" IsSynchronizedWithCurrentItem="True" SelectedIndex="0" Grid.Row="1" > <ListBox.Resources> </listbox.resources></listbox>

Q099. コンボボックスの項目に整数リテラル値を設定するには?

A.ComboBoxItem を使わなくても、直接数値を設定することができます。 <Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" Title="MainWindow" Height="130" Width="250"> <Grid> </grid></window>

Q098. 最大化ボタンを有効にしながら、ユーザーによるサイズ変更を不可にするには?

A.WPF の Window は ResizeMode プロパティを NoResize にすると最大化ボタン等が非表示になります。Window.OnStateCnanged メソッドをオーバーライドするか、HwndSource クラスにメッセージを処理するウィンドウプロシージャを登録します。本記事は、以下 …

Windows 8.1 Preview が公開されたのでお試し中

本日、遂に Windows 8.1 Preview が公開されました。Microsoft の公式ページは以下になります。関連記事:Windows 8.1 Previewついでに Visual Studio 2013 Preview も公開されてましたっ!次の .NET Framework のバージョンは 4.5.1 だそうです。何とも微妙…

Q097. XamDataGrid でフィルタリングされたレコードのコレクションを取得するには?

A.DataRecord.IsFilteredOut プロパティを条件に、クエリで簡単に取得できます。 #2015/02/05 追記: IsFilteredOut の戻り値が Null許容型なので、今更ながら GetValueOrDefault メソッド使わなきゃ駄目なことに気づいた (汗 WPF FAQ の目次に戻る

メールアドレスが有効か判定する(RFC規約違反を許可)

MSDN に「文字列が有効な電子メール形式であるかどうかを検証する」 という記事がありますが、この記事のサンプルは RFC規約違反のアドレスを弾くよう実装してます。しかし hogehoge@i.sopftbank.jp という iPhone メールのドメインも弾くので、このままでは…

Nunit で ActiveXコンポーネントのメソッドをテストする

プロジェクトで使ってる地図用のActiveXコンポーネント (VB6用!) が、ここ数日おかしな値を返すため、検証用に単体テストを作ることにしました。その備忘録です。 もともと VB6 用のコンポーネントを .NET で使うのはどうよ?という話もあるのですが、代替品…

Convert Zero Datetime キーワード

MySQL の日付型の初期値は 「0000-00-00 00:00:00」 です。これは .NET の日付型 DateTime と互換性がなく、.NET の日付型変数に代入したりキャストすると例外が発生します。 これを回避する接続文字列のキーワードが Convert Zero Datetime。接続文字列にこ…

Q096. DataGrid でセルの値を変えると背景色が変わるようにするには?

A.DataGridColumn.CellStyle にスタイルを定義し、トリガーを設定します。 以下は、Livet を使ったサンプルです。 まず Model に Person クラスを用意しました。名前と所属と住所だけの簡単なクラスです。ちなみに名前空間はコードの都合上、省略してますの…

列挙型の値を List に変換する

Enum.GetValues メソッドを使って値の配列を取得。さらに Enumerable.Cast メソッドと ToList メソッドを使い List に変換します。 Dim list = [Enum].GetValues(GetType(列挙体)).Cast(Of 列挙体)().ToList() var list = Enum.GetValues(typeof(列挙体)).Ca…

Q095. DataGrid でソートを制御にするには?

A.DataGrid.CanUserSortColumns プロパティでグリッド全体のソート可否を制御できます。 列ごとにソートの有効/無効を設定するには DataGridColumn.CanUserSort プロパティを設定してください。DataGrid.CanUserSortColumns を False にした場合、列ごとの…

イベントハンドラで System.Threading.Tasks.Task を使う

#TLで指摘いただいたので、記事を追加しています。 ここひと月ほど、スレッドについて勉強してます。昨日 MSDN フォーラムに非同期に関するスレが立ったので System.Threading.Tasks.Task を使ったコードを提示してみたんですが、こちらにも備忘録で書いとき…

Q094. XamDataGrid で 「フィールドの選択」 のタイトルを変更するには?

A.「フィールドの選択」 のタイトルは通常変更することができません。しかし FieldChooser のインスタンスを取得し、Parent の ToolWindow.Title を設定すれば変更が可能です。 以下、サンプルです。前回はコードビハインドで実装しましたが、今回はインタ…

Q093. XamDataGrid で 「フィールドの選択」 のグループ名を変更するには?

A.FieldLayout.Description プロパティを設定します。 通常「フィールドの選択」のグループ名には、フィールドのグループ名が表示されます。 グループ名を任意の文字列にしたい場合、FieldLayout.Description プロパティを設定すると、グループ名から指定し…

Q092. Binding.RelativeSource の使い方がよくわからない

A.Binding.RelativeSource の使い方がいまいちよくわからなかったので、サンプルを使ってまとめてみました。 MSDN の説明によると バインディング ターゲットの位置に対して相対的な位置を指定することにより、バインディング ソースを取得または設定します…

Q091. XamDataGrid で特定データの前景色を変更後、マウスホバー行や選択セルに設定した前景色を反映するには?

A.CellValuePresenter クラスのスタイルで、ForegroundActiveStyleプロパティ・ForegroundActiveStyle プロパティを編集します。 以下のサンプルでは、department 列が「事務」のレコードの前景色を赤に設定してますが、変更した行の上にマウスを移動したり…

BackgroundWorker を使用して進行状況ダイアログを作成する(WPF & Livet版)

必要に迫られ、DOBON.NET さんの以下の記事BackgroundWorkerクラスを使用して進行状況ダイアログを作成するを参考に、WPF & Livet で進行状況ダイアログを作ってみました。 ダイアログは Forms からも呼び出せることを想定したインターフェイスになってます…

Q090. WPF でタスクトレイアイコンを表示するには?

A.WindowsForms の NotifyIcon クラスを使用します。 WPF では残念ながらタスクトレイアイコンの機能が提供されていません。以下の記事で触れられてますが、WPF はプレゼンテーションライブラリだからということで、MS さんはサポートする気がさらさらない…

Google Map を使って住所を正規化する(その3)

昨日・一昨日のエントリでは二日続けて「Google Map を使って住所を正規化する」記事を書きましたが、現在携わってるプロジェクトのある画面で DOM を使うと、地図コントロール(ActiveX) がなぜか正常動作しなくなります。 関連記事 : Google Map を使って…

Google Map を使って住所を正規化する(その2)

昨日のエントリでは WebBrowser を使いましたが、WebBrowser を使う場合 DocumentCompleted イベントの待機の問題が発生します。Application.DoEvents も極力使いたくないし、WPF でも使いたい。そこで本日は WebRequest と HTML DOM を使ったサンプルを考え…

Google Map を使って住所を正規化する

現在使っている地図ソフトの住所正規化機能の精度が低いので、Google Map を使って正規化できないか調べてます。Google Map API を使わない方向で検索してたら、以下の記事が見つかったので参考にさせて頂きました。 参考記事 : C#でHTMLの特定要素を取得す…

VB で LINQ で連番

Enumerable.Range 使うと簡単にできるみたい。 Module Module1 Sub Main() Dim numbers = From n In Enumerable.Range(1, 100) Select n * n ' メソッド構文 ' Dim numbers = Enumerable.Range(1, 100).Select(Function(n) n * n) For Each number In number…

WPF の Dispatcher について勉強してみた(XPでの描画遅延回避編)

XP での描画遅延の問題(Button の Enable/Disableが切り替わらない)を回避するのに、自前の RelayCommand を以下のように実装してみました。 /// <summary> /// 現在の状態でこの RelayCommand を実行できるかどうかを判断します。 /// </summary> public bool CanExecute(obj…

WPF の Dispatcher について勉強してみた

WPF の Dispatcher について勉強がてら自分なりに得た理解をまとめてみました。WPF アプリケーションは、レンダリング(描画)用とユーザーインターフェイス用の2つのスレッドを用いて動作します。 レンダリングスレッドはバックグラウンド動作のため、開発…

Livet をカスタマイズする(1.0.6.1版 VB.NET用)

以前のエントリからだいぶ日にちが経ち、Livet も 1.0.6.1 と大きくバージョンアップしました。それに伴い仕様も大きく変わり、VB ユーザーには少々使いづらくなったので、以前の改造だけじゃ足りない部分も増えてます。そこで最新バージョンに合わせ、Livet…

WPF の描画遅延問題について

本日、MSDN フォーラムで以下の質問がありました。 WPF TextBox.AppendTextにより文字列が追加されるタイミングについて 前にもフォーラムで以下の質問ありましたが、どうやら実行環境による問題っぽいです。 テキストを選択するとフォントがぼやける TextBo…

LINQ to XML を使ってみた(VB.NET)

またまた備忘録です。WebRequest で XML 取得しごりごりデシリアライズしてたのを、LINQ to XML で書き直してみました。感想・・・凄くすっきりしたコードになりますね!元コード。WebRequest を使ってXMLを取得、XmlTextReader に読み込んで、ごりごりデシ…