ブログに書く内容とか

  • 仕事(開発)時の覚書的なメモ
  • メインは、C#、WPF、時々WCF
  • ご利用は自己責任でよろしく

スポンサーサイト

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

DataGridのコピー機能が、日本語限定でバグってる(壱)

 もう長い間開発を続けていたアプリケーションが、新たなユーザーにリリースされた。利用する部署が格段に増えたので、当然ながら問合せも増える。その中の一つに不可解な不具合報告があった。
リスト(DataGrid)からデータをコピーして、Excelに貼り付けたらなんかおかしい
なんかおかしいって…と思いつつ、確認作業をしてみたら、確かになんかおかしい。
 最後まで貼り付けしてくれない感じで、例えば、7行コピーしてExcelに貼り付けても、6行ちょっとしか貼り付けない。しかし、テキストファイルに貼り付ける分には、特に異常がない。なんぞこれは。というので調査することになった。しかし、貼り付け機能はともかく、コピー機能なんてWPF標準の機能として存在するので、それに任せっきりだったなぁ。
 で、調査した結果、コピーする範囲に日本語を含んでいる時におかしくなるようだった。DataGridのソースコードまで探しだして調査する羽目になった。続きを読む
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0

イベント名が紛らわしい

 WPFで、ポップアップ通知的なものを作って欲しいという要望がユーザーさんから寄せられ、作ることになった。
ポップアップの画面にウィンドウの枠はなく、マウスの左ボタンを押すことで、ウィンドウをドラッグさせる必要がある。
 この実装そのものはそこまで難しい訳ではなく、MouseLeftButtonDownというイベントにハンドラ(メソッド)を登録して、そのメソッド内でDragMoveメソッドを実行すれば良い。

this.MouseLeftButtonDown += MainWindow_MouseLeftButtonDown;

/// <summary>
/// マウス左ボタン押下イベントハンドラ
/// </summary>
/// <param name="sender">イベントソース</param>
/// <param name="e">イベントデータ</param>
private void MainWindow_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
this.DragMove();
return;
}
これでタイトルバー以外をクリックしてもドラッグできる。
 ところが、ポップアップ機能をリリースしてしばらくすると、どうもこのポップアップでエラーが起きているようだった。MouseRightButtonDownイベントハンドラ内でDragMoveメソッドを実行するとエラーになることまでは分かったのだけど、そういう実装でリリースしている訳でもない。さっぱり原因がわからず悩んでいた時、うちの同僚さんで、マウスの左利き設定をしている人がいることを思い出した。

もしかして、マウスの左利き設定をすると、右ボタン押下のイベントで処理しないと駄目なのでは?

そう考え、左利き用の設定をした後、同じように実行してみた。で、その時に、右ボタンのクリックで、MouseRightButtonDownではなく、 MouseLeftButtonDownイベントが発生することを初めて知ったのである。
 結果から考えるに、MouseLeftButtonDownイベントは、「マウスの左ボタン」がクリックされた時ではなく、「標準の選択とドラッグとして選んだ側のボタン」がクリックされた時に発生しているようだ。で、その反対側のボタンでMouseRightButtonDownが発生していると。もう少し、イベントの名前をどうにかできなかったのだろうか。まあ、「標準」と「それ以外」を意味するイベントは、それはそれでわかりづらい気がしなくもない。単に考えるの面倒くさかったのかもしれないけど。いずれにしても紛らわしい。
 ん?でも、それだと、エラーになんてならないはず。調査はまだ続くのだった。続きを読む
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0

時代の流れでコードの書き方も変わる

仕事では、.NET4(VS2010)をIDEとして使っている関係上、C#5以降の機能を使うことはできない。
最初の頃に書いたコードに、ToStringというユーティリティメソッドがある。
クラスはシンプルが良い(Utility編)
このユーティリティメソッドは、Java時代からの長い付き合いである。
これをC#6.0風に書くと、こんな感じになるだろうか。
public static class StringUtil {

/// <summary>
/// 引数オブジェクトを文字列で返します。nullなら空文字列が返されます。
/// </summary>
/// <typeparam name="T">引数オブジェクトのタイプ</typeparam>
/// <param name="obj">オブジェクト</param>
/// <returns>文字列</returns>
public static string ToString<T>(T obj) {
return obj?.ToString() ?? string.Empty;
}
}
?が3つもあるが、一行で書けたりする。開発環境もそろそろVS2015に移行する時期なんだろうな。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0

ファイルは選ぶ事あるけど、フォルダを選ぶことは少ない。

ある日、仕事してると、仕事の同僚さんから聞かれた。

同僚さん:フォルダを選択するダイアログあるんですけど、これ、直接パス入力できないんですよね?

C#、というかWindows.Formsが提供するフォルダ選択ダイアログは、FolderBrowserDialogしかない。
[フォルダの参照]ダイアログを使用するには?
起動時にどこのフォルダを表示するか?とか、新しいフォルダを作成するボタンを表示するかどうか?くらいは設定できる。でも、それだけ。何が面倒くさいって、ファイルサーバー上のファイルを探す時が非常に面倒くさい。そして、なんといかとても"ちゃちい"のだ。
これは1.1の頃から変わらず、4、4.5になった今でもこれしかないと思っていたし、実際、。探しても見つからなかった。
ただ、この同僚さんと話をしている時に気づいた。

ん?いや待てよ?そういえば、Visual Studioでプロジェクトを作る時にフォルダを選択するけど、その時のダイアログはこれじゃないぞ?

と。もっとこう、なんというか、色々できたというか。このダイアログ使えたら万事解決ではないの?と。
で、色々調べてみた。同じことを思った人は少なからずいると思って。
HOW - Detailed Folder Browser - VS 2010
要は、Windows Vista以降で使用できるIFileOpenDialogインターフェースを実装すれば良いらしい。
手っ取り早く使いたいなら、Windows 7 API Code Packを使えば、"それ"が使えるようだ。NuGetでインストールできるらしいし。
続きを読む
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0

マイナンバーと法人番号

その是非はともかくとして、そろそろマイナンバーが使われ始める。今頃の恒例行事となっている年末調整にも必要らしい。
マイナンバー 社会保障・税番号制度
個人だけだと思ったら、法人にも番号が振られている。
法人番号公表サイト
ソフト屋の端くれとして、その番号をチェックするロジックがきになる訳で。
でももう色々なサイトに掲載されている。
行政手続における特定の個人を識別するための番号の利用等に関する法律施行令
法人番号の指定等に関する省令
国が書くと、わかりづらいので、個人で掲載している所も探す。
マイナンバーのチェックデジットを計算する
マイナンバー法における法人番号の検査用数
RubyとJavascriptで書かれている。まあ自分用にC#で起こしてみる。続きを読む
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0

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

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

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

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

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