2011年07月27日

Windows CE プログラムのバージョン取得

今Windows CE のアプリを作っているのだが、自アプリのバージョン(アセンブリバージョンのみ有)を取得しようとして、従来の一般アプリの方法「自アプリケーションのバージョンを取得」が使えないのに気が付いた。

調べてみたら全く知らない方法で取得することが判った。
Dim ver As String = _
System.Reflection.Assembly.GetExecutingAssembly.GetName.Version.ToString

これはMicrosoftの.NET Compact Framework に関するよくある質問サイトで見つけた。
.NET Compact Framework 内のファイルのバージョンを確認できますか
posted by なっちゃん at 18:03| 静岡 ☔| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする

2011年07月26日

マウスイベントと同時にキーボードの状態を取得するには

SHIFTキーとCTRLキーを押しながら右クリックしたことを知るには
・VB6
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
If Shift = (vbShiftMask + vbCtrlMask) Then
MsgBox "SHIFT+CTRL+右クリック"
End If
End If
End Sub

・VB.NET
Private Sub Form1_MouseUp(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
If e.Button = Windows.Forms.MouseButtons.Right Then
If Control.ModifierKeys = (Keys.Shift + Keys.Control) Then
MsgBox "SHIFT+CTRL+右クリック"
End If
End If
End Sub
・VB2005以降ならControl.ModifierKeysの代わりに以下も可能
My.Computer.Keyboard.ShiftKeyDown And My.Comp.Keyboard.CtrlKeyDown
posted by なっちゃん at 16:03| 静岡 ☔| Comment(0) | TrackBack(0) | VB vs VB.NET | このブログの読者になる | 更新情報をチェックする

2011年04月20日

ListViewのページングの問題点。ページ位置を初期化(リセット)させるには

ASP.NET 3.5から採用されたListViewコントロールにページング機能を付ける場合、DataPagerというコントロールを使う。
これは便利なのだが、一つ困ったことに、データ表示する条件を変えて再表示させると前回のページ位置を保持して先頭ページから表示しないというバグ(?)がある。
具体的に言えば、条件無しで全30件のデータを1ページ10件で表示したとする。
2ページ目に移動した後、条件を変えて検索し結果が13件あったとすると、2ページ目の3件を表示してしまう。先頭から表示するのが普通だと思うがそうならない。
そこで、検索時にDataPagerをリセットさせて先頭ページから表示させようと思うのだが、
これが結構難題だった。プロパティで簡単にできるかと思ったのだが、そのようなプロパティは無く、結局内部でイベントを発生させて先頭に移動させる方法が必要だった。

参考にした海外のサイト:http://leedumond.com/blog/resetting-the-page-index-in-a-listview/

ページ移動する場合は、DataPagerのOnPagerCommandメソッドで指定されたイベントで先頭ページ(NewStartRowIndex)を指定するが、再検索時にこのイベントを強制的に発動させる必要がある。

'- 1ページ目から表示させる処理 --
Private Sub PagerReset()
Dim dp As DataPager = ListView1.FindControl("pager")
If Not dp Is Nothing Then
'リセット用もしくは先頭ページへのコマンドを指定
Dim cmdEventArgs As CommandEventArgs = New CommandEventArgs("Reset", "")
Dim tempPagerField As TemplatePagerField = dp.Fields(0)
If Not tempPagerField Is Nothing Then
'ここでPagerCommandのイベントが処理される
tempPagerField.HandleEvent(cmdEventArgs)
End If
End If
End Sub
posted by なっちゃん at 15:33| 静岡 ☔| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2011年02月14日

TextBoxにフォーカスを当てたとき、選択状態(反転)させるには

ブラウザ上のテキストボックスをタブキーなどで移動すると自動で文字列が選択状態となっている。しかし、ロード時にTextBox.Focusとやってもカーソルは移動しているが選択状態つまり反転はしていない。これを実行するには以下のようにすると良い。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
If Not IsPostBack Then
TextBox1.Text = "あいうえお"
TextBox1.Attributes.Add("onfocus", "this.select();")
TextBox1.Focus()
End If
End Sub


posted by なっちゃん at 10:57| 静岡 ☁| Comment(2) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年12月06日

Crystal Reports for Visual Studio 2010 正規版が公開

ようやくベータ版から正規版となり、日本語環境で使えるようになった。

それにしても、VS2010(日本語版)が発売されてから、半年遅れでようやく使えるようになるというのはどういうことだろうか。結局VS2008で開発せざるをえなかった。
Crystal Reportsは旧Visual Basic5/6時代からバンドルされている名レポートツールだが、たびたび提供する会社が変わった。この際Microsoftが自社製品として買収すればいいんだ。

ダウンロード

ダウンロード2

ダウンロード:日本語選択

セットアップ

セットアップ2

インストール完了後、レポートを追加するとウィザードが起動した。
ウィザードが起動
posted by なっちゃん at 14:50| 静岡 ☀| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年10月20日

半角カタカナは全角に、全角の英数字、記号、スペースは半角に変換

Webアプリなどで入力した文字列を半角や全角で統一したい場合に使えます。
※Imports System.Text.RegularExpressions の宣言を忘れずに

'/// 半角カタカナは全角に変換し、全角英数字記号は半角に変換 //////
Public Function ConvANK(ByVal moto As String) As String
'-- 全角の英数字、記号、スペースを半角に --
Dim re As Regex = New Regex("[0-9A-Za-z:,. ]+")
Dim output As String = re.Replace(moto, AddressOf myReplacer)
'-- 半角カタカナ(Unicodeで\uFF61-\uFF9Fが範囲)を全角に --
Dim re2 As Regex = New Regex("[\uFF61-\uFF9F]+")
Dim output2 As String = re2.Replace(output, AddressOf myReplacer2)
Return output2
End Function

'/// 半角変換 ///
Shared Function myReplacer(ByVal m As Match) As String
Return Strings.StrConv(m.Value, VbStrConv.Narrow, 0)
End Function

'/// 全角変換 ///
Shared Function myReplacer2(ByVal m As Match) As String
Return Strings.StrConv(m.Value, VbStrConv.Wide, 0)
End Function

posted by なっちゃん at 15:16| 静岡 ☔| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年10月19日

ASP.NET AjaxでMsgBoxを使う

以前「ASP.NETでMsgBox(もどき)を使う」を紹介したが、これはASP.NET Ajax上ではエラーになる。
そこで、Ajax上(UpdatePanel内)でも動作する新バージョンを紹介する。

'//// Ajax対応版MsgBox //////
Private Sub AjaxMsgBox(ByVal msg As String)
Dim strScript As String = "alert('" & msg & "');"
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, Me.GetType(), _
"msgbox", strScript, True)
End Sub
posted by なっちゃん at 20:49| 静岡 ☁| Comment(2) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年10月07日

「プレフィックスの最大数を超えています...」エラーの顛末

ASP.NET3.5でListViewを使ったWebアプリでデータの更新(UpdateCommand)を実行しようとしたときエラー「数値 名'System.Web.UI.WebControls' プレフィックスの最大数を超えています。最大数は 3 です。」が発生した。

デバッグポイントを追ってみたらListViewのEditItemTemplateのコントロールからデータを取得している最中に起こっているらしいことが判った。「プレフィックスの最大数」でググッてみるとほとんどがデータベース(SQLServer)に関する問題なので、それ以前に発生しているのが変だなと思っていたところ何度もデバッグするうちにエラーの発生する箇所が特定できないことが判った。
ステップオーバーで一行ずつ確認してみると早くエラーすることもあれば最後まで取得可能な場合もある。当初はコントロールからの取得に問題があると考え、しかも「System.Web.UI.WebControls」と表示されているのでコントロールに問題があるとばかり考えていろいろ修正してみたのだが、一向にエラーがなくならない。同僚にも確認してもらデバッグの状態を調べているうちに、とんでもない間違いを見つけた。全てはそれが原因だった。

コントロールから変数を取得する際、TextBox1.Textとすべきところを、TextBox1.ToStringとしていたのだ。その結果、'System.Web.UI.WebControls.TextBox'という文字列がSQL文に含まれ、これを解釈した結果が「プレフィックスの最大数を超えています」になったのである。ここにはドット(.)が4つ、つまりプレフィックスが4つになっていたのだ。VisualStudioのコード入力支援で自動メンバ表示で誤って選択してしまった結果である。
またデバッグ箇所が特定できなかったのも解決に時間が掛かった原因でもある。ステップさせても突然先に進んでエラー箇所に行く前にエラーメッセージが出てしまうことがこれまでにも何度かあった。

また、このテストの過程で再確認したことがある。
それはTextBoxから変更された値を取得しようとしても ReadOnlyプロパティがTrueになっていると変更値が取得できないということだ。
posted by なっちゃん at 09:04| 静岡 ☔| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年08月09日

AjaxContorlToolkit を使った時のエラー

VS2008(sp1)でASP.NET3.5の開発をしていてAjaxControlToolkitのModalPopupExtenderを使った際、以下のようなエラーが発生した。

「Microsoft JScript 実行時エラー: AjaxControlToolkit requires ASP.NET Ajax 4.0 scripts. Ensure the correct version of the scripts are referenced. If you are using an ASP.NET ScriptManager, switch to the ToolkitScriptManager in AjaxControlToolkit.dll.」

JScript実行時エラー

単純に翻訳するとASP.NET Ajax 4.0が必要だという意味になるが、ASP.NET3.5にVS2010開発環境のASP.NET4.0を使えというのは変だろう?
実際ダウンロードして使おうとしてもバージョンが違うと言われて実行すらできない。

そこでいろいろ調べてみた結果。Ajaxを利用する時に使う「ScriptManager」をAjaxControlToolkitツールボックスにある方の「ToolkitScriptManager」に変更するだけでエラーが解消されることが判った。

変更箇所

何故こうするとエラーが解消されるのかはよくわからない。
ToolkitScriptManagerについては山田祥寛氏の以下の説明を参考に。
「参考:ToolkitScriptManagerコントロール」
posted by なっちゃん at 10:35| 静岡 ☔| Comment(5) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年07月06日

Crystal Reports for Visual Studio 2010 Beta版は英語版なら起動する

前回「Crystal Reports for Visual Studio 2010 Beta版は日本語環境では使えない」ということを書いたが、本当にそうだろうか?何か設定が足りないから動かないんじゃないか?という疑問が消えなかった。

そこで実際に英語版で同じ手順でインストールすれば使えるかどうかを確かめることにした。

英語版WindowsXP(Pro)上に英語版VS2010(Pro)をインストールしてみたのが下の図だ。

英語版VS2010でクリスタルレポートを使う


そして同じように「cr4vs2010.exe」をダウンロードしてインストールした。(下図)

インストール

VS2010を再起動してレポートファイル(rpt)を追加したところ、間違いなくrptファイルが作成され、ウィザードが起動した。(下図)
やはり日本語環境ではベータ版は使えないことが判った。

クリスタルレポートのウィザード起動

提供元のSAPのアナウンスによると、現在のベータ版はベータ1で8月上旬にはベータ2を提供し、製品版は11月になるという。ベータ2に各国語版が含まれれば良いが、さもないとVS2010での開発は諦めてVS2008を使うしかないかもしれない。続きを読む
posted by なっちゃん at 17:55| 静岡 ☀| Comment(3) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。