7月 11

ASP.NET AjaxControlToolkit ModalPopupExtender 表示時にテキストボックス(TextBox)にフォーカス(focus)をあてる

通常、AjaxControlToolkitのModalPopupExtenderを利用して表示させると、フォーカスを自由にセットできない。
そして色々とググりまくったが日本語で丁寧に書かれているものが見つからなかったので、覚書。

vb側


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If IsPostBack = False Then
        cmdOpen.Attributes.Add("onclick", "fnSetFocus('" & txtSearch.ClientID & "');")
    End If
End Sub

aspx側に適当に記載


<script type="text/javascript">
<!--
    //ModalPopupExtenderで表示した際にフォーカスをセットする
    var clientid;
    function fnSetFocus(txtClientId) {
        clientid = txtClientId;
        setTimeout("fnFocus()", 100);
    }
    function fnFocus() {
        eval("document.getElementById('" + clientid + "').focus()");
    }
// -->
</script>

あとは通常通り、ModalPopupExtenderの設定をし、動かせばOKです。
このサンプルでは、TargetControlIDを”cmdOpen”として記述しています。

参考元ソース

http://www.aspdotnetcodes.com/ModalPopup_Postback.aspx


12月 12

COMポートの一覧を詳細な名前付きで取得する方法(VB2010,VB.NET)

USBバーチャルCOMのバーコードリーダーのポートが接続する度に変わってしまうので、
プログラム側からポート番号を取得!

VB2010でのサンプルソース

cmbPortNameという名前でComboBoxを設置した状態として

Dim PortsTable As New Dictionary(Of String, String)
Dim mcW32SerPort As New ManagementClass("Win32_SerialPort")
For Each aSerialPort As ManagementObject In mcW32SerPort.GetInstances()
    PortsTable.Add(DirectCast(aSerialPort.GetPropertyValue("Caption"), String), DirectCast(aSerialPort.GetPropertyValue("DeviceID"), String))
Next

cmbPortName.Items.Clear()
For Each aPortCaption As String In PortsTable.Keys
    cmbPortName.Items.Add(aPortCaption)
Next

で一覧を取得できます。

参考URL:シリアルポートの名前取得

http://axion.sakura.ne.jp/blog/index.php?UID=1278233577


11月 18

WPFで右上のバツボタン(閉じるボタン)を表示しないようにする(VB2010,VB.NET)

WPFでタイトルバーのところは表示したいんだケド、右上のバツボタンは表示したくないという時
これで右上に出ているものが全て消え去ります。
VB2010にてのサンプルソース

Imports System.Runtime.InteropServices
Imports System.Windows.Interop
Class MainWindow
    <DllImport("user32.dll")> _
    Private Shared Function GetWindowLong(hWnd As IntPtr, nIndex As Integer) As Integer
    End Function
    <DllImport("user32.dll")> _
    Private Shared Function SetWindowLong(hWnd As IntPtr, nIndex As Integer, dwNewLong As Integer) As Integer
    End Function
    Const GWL_STYLE As Integer = -16
    Const WS_SYSMENU As Integer = &H80000
    Protected Overrides Sub OnSourceInitialized(e As EventArgs)
        MyBase.OnSourceInitialized(e)
        Dim handle As IntPtr = (New WindowInteropHelper(Me)).Handle
        Dim style = GetWindowLong(handle, GWL_STYLE)
        style = style And (Not WS_SYSMENU)
        SetWindowLong(handle, GWL_STYLE, style)
    End Sub
End Class


11月 17

WPFアニメーションのフレーム数を変更する

‘WPFアニメーションはデフォルトでは60フレーム/秒で動くらしいです。
が、スペックが低いPCでは厳しい場合もあるので、たとえば30フレーム/秒にする時はVB.NETでは、

System.Windows.Media.Animation.Timeline.DesiredFrameRateProperty.OverrideMetadata(GetType(System.Windows.Media.Animation.Timeline), New FrameworkPropertyMetadata(30))

と書くだけで変更する事ができる。


11月 17

WPFで画像の描画を高速化(cached composition)

Imageがコントロールに割りついているとして、VB2010でのサンプル

Dim bitmapCache = New BitmapCache()
bitmapCache.RenderAtScale = 1
Image.CacheMode = bitmapCache

とする事で、GPUのメモリにキャッシュされ、読み込みが早くなる。


10月 31

VB.NETでの強制的なガベージコレクション(メモリ解放)

‘強制的にガベージコレクションを実行する

System.GC.Collect()
System.GC.WaitForPendingFinalizers()
System.GC.Collect()


10月 25

半角スペースが続くヤツを半角スペース一つにする正規表現

半角スペースが続くヤツを半角スペース一つにする正規表現はこんな感じ

/(\s)\1{1,}/

VB2010での使い方のサンプルとしては、

Dim sql As String = "select         * from    Table"
Dim r As New System.Text.RegularExpressions.Regex("(\s)\1{1,}")
sql = r.Replace(sql, " ")

こんな感じで”select * from Table”にできます。

半角スペースを意図的に利用している時はこれじゃ使えないケドね・・・