Visual Basic や Visual C# などでフォームアプリケーションを作っているときの話。
ラベルのAutoSizeのデフォルトが False だったらいいなー と思ったことはないだろうか。 AutoSize = True
で作ります!ってとこもあるだろうけど、私の会社では AutoSize = False
。 しかし毎回ラベルを貼り付けるたびにプロパティを設定するのも面倒だ。そこで Label
の AutoSize
のデフォルト値(規定値)を False
にしたラベルを作ってしまおうというのが今回のコード。 Visual Studio 2010, Visual Basic で確認済み。
Visual Studio Professional Edition の場合は、継承したコントロールを作ることができる。 Express Edition では、継承したコントロールは最初からはできなかったような気がする。その場合は、継承したクラスをまず作る。
継承するのは System.Windows.Forms.Label
。 ここでありがちなのが、コントロールのデザイナ画面のプロパティウインドウで AutoSize
を False
にするやり方(デザイナ画面には何も表示されないが、プロパティウインドウは使える)。 Label の場合は厄介で、実際にフォームに貼り付けるときには AutoSize = True
に戻ってしまう。 そこで、コードの表示をして、次のコードを追加する。
続きを読む .Net ラベルの AutoSize プロパティのデフォルトを固定 →
CrypstalReports で日付の数値を年月日表記にする方法です。 日付のデータを年月日の8桁の数値として保存している場合に使えるコードです。
まず、式フィールドを作成します。 その中に、次のような式を書き込みます。 式の編集をするには 右クリックから式の編集を選択します。
|
Local NumberVar Y := {DBColumn} \ 10000; Local NumberVar M := ({DBColumn} MOD 10000) \ 100; Local NumberVar D := {DBColumn} MOD 100; CDate (Y, M, D); |
これで、数値を日付にすることができました。DBColumn のところには、データベースのフィールド名を入れてください。
しかし、これではまだ 1986/01/06
という形で表示されます。 この日付のフォーマットを変えるには、この式フィールドのプロパティを設定します。
DateFirstSeparator, DateSecondSeparator, DateSuffixSeparator それぞれに、”年”、”月”、”日” を入力すると、 1986年01月06日
というように表示されます。
matriXscan というメール関連製品のログをチェックしたことがありました。 そのときに使ったテキストファイルを分割するスクリプトを紹介します。 ログのチェックはテキストエディタで開けばできるのですが、 そのときのログは 1.3 GB あり、テキストエディタでは開けない巨大なファイルになっていました。
続きを読む テキストファイルを分割するスクリプト →
過去に書いていた VBA のファイル名に関連した文字列操作の記事をまとめました。
ファイルパスからディレクトリ名を取得する
|
''' ファイル名から拡張子を取り除く ''' ファイル名からディレクトリ名を取得する。 Private Function GetDirectoryFromFileName(ByVal Filename$) GetDirectoryFromFileName = Left(Filename, InStrRev(Filename, "")) End Function |
ファイルパスから一番右のバックスラッシュの位置を探して、ファイルパスのそれより左の部分を抽出します。 バックスラッシュが見つからなかった場合(ディレクトリがファイルパスに含まれない場合)は、空文字列が返ります。
ファイル名から拡張子を取り除く
|
''' ファイル名から拡張子を取り除く Private Function RemoveExtension(ByVal Filename As String) As String Dim dotIndex& dotIndex = InStrRev(Filename, ".") RemoveExtension = Left(Filename, dotIndex - 1) End Function |
注意
InStrRev
が返す文字位置は 1 から始まります。 (配列インデックスのように 0 から始まるわけではありません。)
ファイル名に “.” が含まれない場合は Left
の第2引数に負の数が渡るため、例外が発生します。 これを解消するには次のようにします。
|
''' ファイル名から拡張子を取り除く Private Function RemoveExtension(ByVal Filename As String) As String Dim dotIndex& dotIndex = InStrRev(Filename, ".") If dotIndex < 1 Then dotIndex = dotIndex + 1 End If RemoveExtension = Left(Filename, dotIndex - 1) End Function |
Right
を使って拡張子を取得することもできます。
ファイル名から拡張子を取得する
ここでは、あるところで使われていたコードを見てみます。
|
Private Function GetFileExtention(Fnm As String) As String 'ファイルの拡張子を文字列操作で求める。 'すべて小文字に変換する。 Dim st$ st = Fnm If InStr(1, st, "") >= 1 Then st = Mid$(st, InStrRev(st, "") + 1) If InStr(1, st, ".") >= 1 Then st = Mid$(st, InStrRev(st, ".") + 1) Else st = "" GetFileExtention = StrConv(st, vbLowerCase) End Function |
与えられた文字列にバックスラッシュがあればそれより後ろの文字列にして、 その後ピリオドがあればそれより後ろを抜き出しています。 ピリオドがなければ空文字列が返ります。
関係する関数
- InStrRev(string1, string2[, start[, compare]])
ある文字列 (string1) の中から指定された文字列 (string2) を最後の文字位置から検索を開始し、最初に見つかった文字位置を返す文字列処理関数です。 引数 start を省略すると -1 が使用され、最後の文字位置から検索を開始します。 compare は比較するモード(テキスト/バイナリ)を指定します。省略時はバイナリモードになります。
検索文字列が見つからなければ 0 が返ります。
- Left(ByVal str As String, ByVal Length As Integer)
与えられた文字列の左端から指定された長さの文字列を抽出します。 Length が 0 より小さいと例外が発生します。
- Mid(string, start[, length])
与えられた文字列の部分文字列を返します。 start には先頭の文字を 1 として文字位置を指定します。
- Right(ByVal str As String, ByVal Length As Integer)
与えられた文字列の右端から指定された長さの文字列を抽出します。 Length が 0 より小さいと例外が発生します。
jQuery UI の Accordion では、Accordionの一番上が開いた状態でスタートします。 これを、全て閉じた状態にしておく方法を紹介します。
続きを読む jQuery UI の Accordion で、最初に全て閉じておく方法 →
A Life Summary of an Gypsy