C++でいうところの __FILENAME__
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
System.Diagnostics.StackFrame sf = st.GetFrame(0);
MessageBox.Show( string.Format("{0}:{1}",sf.GetMethod().DeclaringType.FullName, sf.GetMethod().Name));
2010年12月14日火曜日
2010年11月18日木曜日
MVVM:自分自身のプロパティに設定する方法
public int FooProperty
{
get
{
return fooProperty;
}
set
{
fooProperty = value;
DispatcherHelper.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Send
, new Action(delegate { FooProperty = 100; })
);
}
}
2010年5月21日金曜日
TreeViewコントロールの不具合
.Net 3.5までのTreeViewコントロールは追加した項目の最終行が見切れたり表示しない現象が発生します。.Net 4.0では発生しない事を確認しました。
次の様な簡単なテストプログラムを準備します。
(MSDNフォームに投稿したコードと同じです。→MSDNフォーラム)
次の様な簡単なテストプログラムを準備します。
(MSDNフォームに投稿したコードと同じです。→MSDNフォーラム)
2010年5月20日木曜日
XML+XSLT→HTML覚え書き
xsltを使った変換コードを覚え書きとする。
Private m_trnsStyleSheet As Xsl.XslCompiledTransform
Dim _xStyleSheet As XDocument = XDocument.Parse(My.Resources.stylesheet)
m_trnsStyleSheet = New Xsl.XslCompiledTransform()
m_trnsStyleSheet.Load(_xStyleSheet.CreateReader())
'↑この部分は時間がかかるので初回のみ動作させること
Dim _strwrtHTML As New System.Text.StringBuilder
Using _wrtHTML As XmlWriter = _
XmlWriter.Create(_strwrtHTML, m_trnsStyleSheet.OutputSettings)
' XML+XSLT→HTML
m_trnsStyleSheet.Transform(mXMLElement.CreateReader(), Nothing, _wrtHTML)
ctlWeb.DocumentText = _strwrtHTML.ToString()
End Using
XmlWriterでStringBuilderが使えるので、非常に簡潔になった
Private m_trnsStyleSheet As Xsl.XslCompiledTransform
Dim _xStyleSheet As XDocument = XDocument.Parse(My.Resources.stylesheet)
m_trnsStyleSheet = New Xsl.XslCompiledTransform()
m_trnsStyleSheet.Load(_xStyleSheet.CreateReader())
'↑この部分は時間がかかるので初回のみ動作させること
Dim _strwrtHTML As New System.Text.StringBuilder
Using _wrtHTML As XmlWriter = _
XmlWriter.Create(_strwrtHTML, m_trnsStyleSheet.OutputSettings)
' XML+XSLT→HTML
m_trnsStyleSheet.Transform(mXMLElement.CreateReader(), Nothing, _wrtHTML)
ctlWeb.DocumentText = _strwrtHTML.ToString()
End Using
XmlWriterでStringBuilderが使えるので、非常に簡潔になった
2010年5月17日月曜日
ListBox : 項目が存在しないエリアを選択しても選択されないように
なんで.Netのコントロールは、細かい動作に不具合が多いのだろう
ListBox(CheckedListBox)のコントロールの動きについて、項目がListBoxの高さ一杯まで埋まっていない場合、項目がないエリアをクリックすると、選択された動作(SelectedIndexChangedイベント発生)し、違和感がある。
VB6のコントロールでは、こんな動作しなかったのに....
おかげで、ListBoxを利用した抽出画面にお客さんからクレーム来たよ(泣)
VB6と同様に項目が存在しないエリアを選択しても選択されないようにするには...
ListBox(CheckedListBox)のコントロールの動きについて、項目がListBoxの高さ一杯まで埋まっていない場合、項目がないエリアをクリックすると、選択された動作(SelectedIndexChangedイベント発生)し、違和感がある。
VB6のコントロールでは、こんな動作しなかったのに....
おかげで、ListBoxを利用した抽出画面にお客さんからクレーム来たよ(泣)
VB6と同様に項目が存在しないエリアを選択しても選択されないようにするには...
2010年5月16日日曜日
WebBrowser : .Document.Write()は使わない方がよい
WebBrowserコントロールにテキストを設定する手段として、.DocumenetTextにHTMLテキストを設定する手法が一般的である。
しかし、この方法ではHTMLテキストを設定した直後から DocumentComplete()イベントが発生するまで .DocumentTextは以前の設定された内容になっている
また、DocumentComplete()を待たずに、DocumentTextに連続してHTMLテキストを設定すると、2回目以降に設定したテキストが無視される。
さて、設定した内容を即時反映するにはどうすればよいか?
都合の良いことに Write() というメソッドが存在する。
しかし、この方法ではHTMLテキストを設定した直後から DocumentComplete()イベントが発生するまで .DocumentTextは以前の設定された内容になっている
また、DocumentComplete()を待たずに、DocumentTextに連続してHTMLテキストを設定すると、2回目以降に設定したテキストが無視される。
さて、設定した内容を即時反映するにはどうすればよいか?
都合の良いことに Write() というメソッドが存在する。
2010年5月15日土曜日
ListBoxがOwnerDrawVariableの時、マウスホイールで逆スクロール対策
ListBoxコントロールで
DrawMode = Windows.Forms.DrawMode.OwnerDrawVariable
を設定した時、マウスホイールのスクロールが一瞬逆スクロールしている現象の対策
Private Function HIWORD(ByVal intValue As Integer) As Integer
If (intValue And &H80000000) = &H80000000 Then
Return (intValue >> 16)
End If
Return ((intValue >> 16) And &HFFFF)
End Function
DrawMode = Windows.Forms.DrawMode.OwnerDrawVariable
を設定した時、マウスホイールのスクロールが一瞬逆スクロールしている現象の対策
Private Function HIWORD(ByVal intValue As Integer) As Integer
If (intValue And &H80000000) = &H80000000 Then
Return (intValue >> 16)
End If
Return ((intValue >> 16) And &HFFFF)
End Function
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Select Case m.Msg
Case &H20A 'WM_MOUSEWHEEL
Dim _d As Integer = HIWORD(m.WParam.ToInt32())
For _count As Integer = 1 To SystemInformation.MouseWheelScrollLines 'マウスホイールスクロール量(1行ずつ)
Me.TopIndex = Math.Max(0, Me.TopIndex + If(_d < 0, 1, -1))
Me.Invalidate()
Me.Update()
Next
Return
End Select
MyBase.WndProc(m)
End Sub
まぁ、1行ずつスクロールするという事だ。
GDI+でパターンの拡大縮小
GDI+でパターンの拡大/縮小を行う場合、水平、垂直方向に0.5ドットずれて実行されるので、オフセット値を操作する事
'描画モードをニアレストネイバーに設定します
e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
'ピクセルオフセットを設定します
e.Graphics.PixelOffsetMode = PixelOffsetMode.Half
登録:
投稿 (Atom)