スポンサーサイト

上記の広告は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

混ぜたくはないが、やむを得ない時もある。

 Windows Formsの次として作られたWPF(XAML)だけど、混ざっては駄目という訳ではない。ついでに言えば、WPFができる前までは、Windows Formsで作られ、今も運用されている画面がある。すべての画面をWPFでリプレースするのって、意外にでもなく実際に大変で、ぶっちゃけて言えば、然程楽しくない。そのまま再現するのは難しいけど、不可能ではないし、リプレースしたところで、使う側(ユーザー)にしてみれば、何が改善された訳でもなく、今までになかったバグがあるかもしれず、あまりWin-Winとは言えないように感じる。
 で、仕事上、今現在動いている画面をWPFから呼び出せないか?との話があったので、調べてみた。結果から言えば、不可能ではないが、注意する点はあるという事かな。
WPFアプリからWindfows Formsを呼び出す:
 Open WPF window in WindowsForm APP
Windows FormsアプリからWPFを呼び出す:
 how to open a WPF dialog from a WinForms menu
まあ、これだけではなく、ログインだの、それからの処理だのがついてくるんだけど。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0

WPF4.5もまだなんですが…

The Roadmap for WPF
まだWPF4.5もさわってないのに…。4.6開発中かー。
VS2015なので、来年リリースなのかも。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0

パフォチューは 千里の道も一歩から 的な。

 現在、携わっているプロジェクトのとある画面に、更にコントロールを追加することになった。その画面は、ただせさえ数十ののコントロールを持っていて(DataGridも複数あり)、他の画面より起動に時間が掛かっているのに。その「追加予定のコントロールを別画面に」という案は、強権持ちのユーザーさんに却下されている為、しょうがないなってんで、ちょっとでも速度を落とさない為に再度パフォーマンスアップできないかを調べてみることにした。
なお、パフォーマンスやメモリリークに関することは、以前も書いていた。
メモリリークやパフォーマンスに関する事をメモっとく。
 で、本家本元、マイクロソフトのサイトにパフォチューに関する記事があるので、見返していた。
WPF アプリケーションのパフォーマンスの最適化
この中に、パフォーマンスの最適化 : アプリケーション リソースという章があり、その後で自分が作ったカスタムコントロールを眺めていると、あるControlTemplate内で以下のようにしているのを見つけた。続きを読む
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 2 | トラックバック: 0

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

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

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

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

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