0 comments
0 trackbacks

PointCollectionを元から生成してあるものとして、折れ線を描画する箇所だけ覚書
StreamGeometryで描画すると、線が多い場合でもオーバーヘッドが少なくなるそうです。
あたいの変更等が考慮されていない分、Lineを複数設定するより軽くなると思っています。
実際のところは不明です。同じ書き方で複数線も描けるので意外と便利です。


// StreamGeometry生成
StreamGeometry geometry = new StreamGeometry();

using (StreamGeometryContext geometryCnt = geometry.Open())
{
// 始点のポイントを設定
geometryCnt.BeginFigure(PointCollection[0], false, false);
// 2点目から終点までのポイントリストを設定
geometryCnt.PolyLineTo(PointCollection.skip(1).ToList(), true, false);
}
// StreamGeometry確定
geometry.Freeze();

// Pathを生成してデータ設定
Path path = new Path();
path.Stroke = Brushes.Black;
path.StrokeThickness = 1.0;
path.Data = geometry;

■StreamGeometryContextのポイントの設定箇所について
BeginFigure(Point, _buff.GetValue(0)), isFilled, isClosed);について
isFilled・・・pathで設定したFillにより図形の中身を塗りつぶすかどうか
isClosed・・・三点あったら勝手に三角形にしてくれる。今回は折れ線なので閉じたらだめなのでfalse

ctx.PolyLineTo(PointCollection.ToList(), isStroked, isSmoothJoin);について
isStroked・・・線を繋ぐか繋げないかのよう、falseだと線が描画されない
isStroked・・・セグメントと前のセグメント間の結合線に適用したときに、角と見なすかどうか、とりあえずfalse
スポンサーサイト
 ↑↑↑↑↑↑よければクリックをお願いします↓↓↓↓↓↓
0 comments
0 trackbacks

Buttonで「閉じる」を作成して、ウィンドウを閉じたいんですが、
TextBoxのLostFocusイベントがあるために、TextBoxからフォーカスが外れた時点でイベントがはしってへんな感じになってしまいました
その対策と対策時の注意点をちょっとメモしておきます

○まずはXmalでイベントを付けるのではなくLoadイベントでLostFocusを追加(ここはどちらでも良いですが)

//ロードイベント
private void Main_Load(object sender, System.EventArgs e)
{
//TextBox1のLostFocusイベントハンドラを追加する
TextBox1.LostFocus += TextBox1_LostFocus;  
}

○LostFocusイベントは行いたい処理を追加する
//LostFocusイベントハンドラ
private void TextBox1_LostFocus(object sender, EventArgs e)
{
//ここでいろいろチェック処理
}
○「閉じる」ボタンをクリック時
・ここでtextBlock1のロストフォーカスイベントを破棄しておきます。PreviewKeyDownだと、フォーカスが移る前のイベントなのでLostFocusの前に破棄することができました。

private void Button1_PreviewKeyDown(object sender, KeyEventArgs e) {
//TextBox1のLostFocusイベントハンドラを破棄する
TextBox1.LostFocus -= TextBox1_LostFocus;
}

※ここで注意点なのですが、このままだと「閉じる」ボタンをクリックし→そのままドラッグした場合に閉じない(閉じるのはKeyUpにしていたとき)事象が発生します。そしてLostFocusがなくなってしまっていました。
○そのため、「閉じる」ボタンのキーアップイベントでイベントをまた追加させてあげることで、問題は解決しました。

private void Button1_PreviewKeyUp(object sender, KeyEventArgs e) {
//TextBox1のLostFocusイベントハンドラを追加する
TextBox1.LostFocus -= TextBox1_LostFocus;
}

これで「閉じる」ボタンをクリック→やっぱり「閉じる」をやめたいので「閉じる」ボタンからフォーカスをはずしてクリックアップしたいとする期待通りの動作になりました。

それでは(*´-`*)ノ
 ↑↑↑↑↑↑よければクリックをお願いします↓↓↓↓↓↓
0 comments
0 trackbacks

.NET による Outlook アイテムおよび Outlook フォルダの参照に使用できるメソッドについて、ちょっとだけメモです。
①まずはappを連携。
Outlook._Application olApp = new Outlook.ApplicationClass();
try{
 // 実処理
 }catch{
  
}finaly{
  olAppがnull以外なら開放処理。

②Namespaceの取得
これも①と同じような処理で確実にメモリを開放できるようにするとよい
 Outlook._NameSpace olNS = olApp.GetNamespace("MAPI");
ここでは書くのは省略。

その他も省略ですが,ほぼ同じように毎回メモリを開放させてあげるとよいです!

■.netのCOMはなかなかメモリがいろいろなので,最後にはがーべじコレクションを行ってあげます。
GC.collect();
GC.WaitForPendingFinalizers(); //参照のみしか消えてないかもしれないので
GC.collect();            //さらにGCを行う

今回はこんな感じで。
あとはEntryIDやらを指定したり,することで,メールの移動だったり,フォルダの操作だったりを.NETが行ってくれます

それではー(*´-`*)ノ

 ↑↑↑↑↑↑よければクリックをお願いします↓↓↓↓↓↓
0 comments
1 trackbacks

■TraceクラスのWriteメソッドでログファイルを出力すしていきたい。
①using System.Diagnostics;を追加

//DefaultTraceListenerオブジェクトを取得
DefaultTraceListener drl;
drl = (DefaultTraceListener) Trace.Listeners["Default"];
//LogFileNameを変更する
drl.LogFileName = "C:\\log\\1.txt";

もう少し凝ったログ出力方法。
■“日付_連番.log”形式でログファイルを出力する。

簡単なやり方なので,自分でトレースしたいときに使うくらいかと思います。

var dailyLogging = new DailyLoggingTraceListener()
{
OutputDirectory = Application.StartupPath + @"\log\", // 既定値 Application.StartupPath
FileNameFormat = "{0:yyyyMMdd}_{1}.log", // 既定値 {0:yyyyMMdd}_{1}.txt
DatetimeFormat = "{0:MM/dd HH:mm}", // 既定値 {0:MM/dd HH:mm:ss}
};
Trace.Listeners.Add(dailyLogging);
Trace.Listeners.Add(new TextBoxTraceListener(textBox1));
●Application.StartupPath で実行ファイルのあるフォルダに log フォルダを指定しています。
 ↑↑↑↑↑↑よければクリックをお願いします↓↓↓↓↓↓
0 comments
0 trackbacks

C#でキー押下時のイベントについて,Ctrl+Aでリストボックスの内容を全選択してみたいです(*´-`*)ノ

■まずはキーを押した時にイベントを起こしたいです

コントロールにKeyDownというイベントとPreviewKeyDownというイベントがあります。

キーダウン時のイベントはこの2つのようです。

キーが押下されると,そのときフォーカスれていたコントロールを格納しているコントロールが,より親のコントロールから順にキーイベントを発生してきますが,今回はリストボックスのみに焦点をおいてみました。

なので使うイベントはPrebirewKeyDownイベントにします。

■次にリストボックスを全選択していきます

SelectAll関数という便利なものがありませんでした。



■方法1~3について
方法1,2は数が多いと時間がかかってしまいます。
その上ちょっと不格好な処理になってしまいます。

そのため方法3が一番見た目的によかったです。

手動のそうさ「一番上の項目をクリック,その後Shiftを押しながら一番下の項目をクリック」を再現しています。
キーストロークを送信するSendKeysクラスを使用し,一番上をクリックはHomeキーで代用し,一番下をクリックはEndキーで代用してみました。

■PrevirewKeyDownとKeyDownの違いについて
・PrevirewKeyDownでは、IMEがOnの状態で押されたキーも確認できます。

ちなみにWindowフォーム→リストボックスの順にキーダウンのイベントは発生します。
 ↑↑↑↑↑↑よければクリックをお願いします↓↓↓↓↓↓