サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
natchan-develop.seesaa.net
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.F
ようやくベータ版から正規版となり、日本語環境で使えるようになった。 それにしても、VS2010(日本語版)が発売されてから、半年遅れでようやく使えるようになるというのはどういうことだろうか。結局VS2008で開発せざるをえなかった。 Crystal Reportsは旧Visual Basic5/6時代からバンドルされている名レポートツールだが、たびたび提供する会社が変わった。この際Microsoftが自社製品として買収すればいいんだ。 インストール完了後、レポートを追加するとウィザードが起動した。
SQLServer2005の無償版であるExpress版ではAgentサービスが実装されていないため管理ツールSQLServer Management Studio(Express)からメンテナンス機能が使えない。 よってタスクメニューから手動でのバックアップはできても自動で(定期的に)バックアップを行うことができない。そのためどうしてもWindowsのタスク機能を使ってバッチ処理などで実行させる必要がある。 事例: SQLServerインスタンス:SQLEXPRESS データベース名:testdb SQLServer認証ユーザー名:sa、同パスワード:pass バックアップ保存先フォルダ:C:\sqlback 用意するのは2つのファイル(ファイル名は任意) これをバックアップ保存先フォルダに配置する 1.バックアップ命令文(SQL):backup.sql BACKUP DATABASE
ファイルアップロードのサンプルはヘルプを含め、いろんなところに掲載されている。でもほとんどが固定されたフォルダにアップするようになっている。 これを任意のフォルダ(と言ってもアクセス可能な)に動的に作成したフォルダへアップしたいときにどうすれば良いか。 ASP.NET以前の旧ASPでWebアプリを作ったときは「FileSystemObject」を使ってサーバー上のドライブやフォルダを操作していた。それが今回使えるかどうか試してみたら、何の問題も無く使えた。同時にASP.NET時代の方法も試してみた。こちらも当然問題無く可能だ。 補足: このTipsを公開直後、かるあさんから指摘がありましたFileSystemObjectを使った場合のCOM参照の開放を追加しました。 COMオブジェクトの管理についてはMicrosoftのこちらのページを参考にご覧ください。→相互運用機能アセンブリを使った複
VB6だけのTipsを公開するのは今回が初めてです。 ここ1年半程、仕事でVB6を使って開発することがない(バグ修正を除けば)。 しかしオンラインソフトはほとんどVB6で作っているのでバリバリのVB6使いであることに変わりない。 近く公開予定のフリーソフト「ファイルとフォルダの神隠し」を作っているときに思いついた便利な方法を内緒で教えます。 ファイルの有無・フォルダの有無をチェックするには例えばFileSystemObjectを使ったスクリプトがよく知られている。が、ファイル用とフォルダ用が別のメソッドになっている。これでは事前にファイルかフォルダか判定してからでないと使えない。 それを事前チェック無しで、ファイルかフォルダかも判定して存在をチェックする方法が以下の簡単な記述でできる。今までこの倍もあるコードを書いてしかもフォルダチェックはダミーの書き込みまでしていたから(そこではDir関
VB6ではプログラムの動作環境を保存しておくのに、レジストリを使わない方法としてよく利用した。Win32APIを使うが、VB.NETもほとんど同じである。 ※サンプルソースのダウンロードができます。VB6_INI.lzh・VBNET_INI.lzh VB6 Private Declare Function GetPrivateProfileString _ Lib "kernel32" Alias "GetPrivateProfileStringA" _ (ByVal lpAppName As String, _ ByVal lpKeyName As Any, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String
前回のTipsではDateTimePickerで和暦表示を行うにはコントロールパネルの地域オプションのカレンダー表示を和暦にする必要があると書いたが、いろいろ調べてみたところVB6風にプログラム上で和暦表示させる方法が見つかった。VB6の場合と比べると年を直接変更できない問題はあるが(一度カレンダーを表示させて西暦を変更することで可能)、現状ではこれ以上の解決方法はなさそうである。以下にサンプルを記す。 ※DateTimePicker1.Format = DateTimePickerFormat.Custom をロード時またはデザイン時のプロパティに指定しておく。 Imports System.Globalization '--- 汎用モジュールに記述して再利用可能にする ---- Public Function FormatJPCalendar( _ ByVal tday As Date
今まで不思議に思っていたのは、app.config内のMySettingsセクションに更新した内容が保存されるのものと思っていたのにファイルのタイムスタンプを見てもインストール時と全く同じままなので一体どこに保存されているのだろうかということだった。 いろいろ調べてみたところ、Documents and Settings\(LoginUser)\Local Settings\Application Data\(会社名)\(アプリ名)\(アセンブリバージョン)\ 内にuser.configというファイルに保存されていることが判った。(下図) user.configのなかみ ※このことで、前Tipsで一部不正確なところがありました。 アセンブリバージョンが変わるとアプリケーション設定(app.config)のMy.Settingsの内容が初期化されると説明しましたが、正しくはアセンブリバージョ
Windowsサービスを作成したが、動作がおかしいのでデバッグすることになった。 その時のデバッグ操作が結構てこずったので注意書きとしてまとめておく。 デバッグの方法はWindowsプログラムとはちょっと違う。WindowsプログラムではDebugモードで実行させるだけで済むがサービスプログラムは実際にサービスとして稼動させてから開発ツールでそのプロセスを監視させて行う。 ここで注意すべきなのはWindowsプログラムと同様にビルドの構成をDebugにしておく必要があることだ。(過去ログ:ブレークポイントで止まらないを参照) サービスプログラムを実行させるには (Windows)\Microsoft.NET\Framework\(バージョン)\installutil.exe を使ってインストールする必要がある。コマンドプロンプトから実行するので私の場合は、このコマンドだけをサービスプログラ
前回わけ在ってASP.NETではなく旧ASP(レガシーASP)で開発することになった顛末を紹介した。 ASP開発にはこれまでずっとVisualStudio6.0のInterDevを使っていたので今回も当然使った。ところが、データベースに接続するところでSQLServer2005には問題なく接続できるのに、Access2002(2000)にはどうやっても接続できない現象が現れた。しかも、InterDevを使わなければ接続できることもあるので困ってしまった。 そうしたなか、VisualStudio2005で使えないかと調べているうちに山田祥寛氏の記事(PDF)を見つけた。ほんの最近公開されたものであるが、そのなかにVisualStudio2008SP1では「レガシーASPの開発サポートを復活」と書かれているのを発見した。 さっそく無償のExpress版のVisual Web Developer
Windows7のRC版の公開のアナウンスと共に興味深い記事があった。 それが「Windows XP Mode」と呼ばれるものだ。これはWindows7とは別に提供される。 http://www.microsoft.com/windows/virtual-pc/download.aspx アナウンスでは「Professional」「Enterprise」「Ultimate」エディションでしか使えないらしい。RC版はUltimateだから試すことができる。 「Windows XP Mode」の実体は、別途起動させた「Virtual PC」 から特定のアプリケーションだけを表示させて、あたかもWindows7で起動しているかのように見せるものである。 ちなみに、ウィンドウデザインはXPそのままなので、Vista以降の新しいインターフェースのウィンドウに混じって表示されると変な感じがするが、XP
ASP.NETに限らずWebシステムではJavascriptのwindow.open()を使いサブウィンドウを開く場面がよくある。 これがWindowsXP ServicePack2から導入され、Googleツールバーにもあるポップアップブロックによって、効かなくなることがある。それぞれ設定を解除させれば良いが、今回紹介するのは設定解除することなく、回避する方法である。 調べてみると意外に簡単に方法が見つかった。 そもそもポップアップブロックはユーザーが自らの意思でボタンを押したものには働かない。自動で(勝手に)開くウィンドウを阻止するものである。よってサーバーサイドで実行したものは必ずブロックされてしまう。 そこでクライアントサイドのOnClickイベント内で開くように変更すれば良いのである。 例:onclick="window.open('hoge.aspx');return fals
VisualBasic6.0とVisualBasic.NETのソース比較、ASP.NET、VB2005~VB2010、エラー時の対応等のTips公開
以前紹介したComboBoxの初期化は単純にテキスト項目をセットするものだった。 今回はVB6のItemDataに相当する表示テキストとは別の値(数値)をセットする方法である。 これは予想外に手間取った。結論から言えばVB.NETにItemDataに相当するプロパティは無い。 オンラインマニュアル、サンプル、幾つかの参考書を調べても掲載されていないのだ。やっと見つけたのが「魔界の仮面弁士」さんの記事である。(この方は相当な経験と知識の持ち主である。これまでもオンラインソフトの開発では幾度となく助けられた。) Addメソッドで登録できるのはVB6の場合はテキストのみだが、VB.NETではObject型に代わっている。つまりテキストの他何でも登録できるように進化している。 ただこれによってObject型の定義が事前に必要になってくる。共通モジュールにでも登録しておくといいだろう。 サンプルは前
タスクトレイに常駐させるプログラムの場合、VB6ではForm_Loadイベント内で、Me.Visible = False と記述するだけで、フォームを全く表示することなく起動することができた。 ところが、VB.NETではMe.Visible = False とやっているにも関わらずなぜか表示してしまう。 Me.RefreshやApplication.DoEventsを付けても全くだめ。Activatedイベント内で非表示にさせようとしても駄目だった。 一度フォームが表示した後でなら、いくらでも非表示にさせられるのに、起動時に非表示にできないのである。 仕方が無いのでTimerコントロールを使いTimerイベント内でMe.Visible=Falseを実行させたところ、一瞬表示された後フォームは消えた。 スマートではないがとりあえず非表示にはなった。だが、やはり納得がいかずもう少し調べてみた。
ASP.NET AJAX Control Toolkitの中からCalendarを使ってみた。 とても便利なのだが、月の表記が英語になってしまう。 サンプルではちゃんと日本語になるのに、自分の作ったページではどういうわけか英語表記になってしまう。 半日ほど調べまわってようやく、サイトのサンプルの下に英語で何やら書いてあるのを見つけた。これによるとページの国別属性Cultureの設定が必要だということ。ページ単位なら@Pageディレクティブにサイト全体ならWeb.Configに設定するようだ。 試しにWeb.Configに設定してみた。 でもやっぱり英語表記のままだった(--; もう一度説明を見るとCulture設定を有効にするには、さらにAJAXのScriptManagerのプロパティ「EnableScriptGlobalization」「EnableScriptLocalization」
GridViewは大変便利であるが、表形式の入力画面が欲しいときにはやや力不足なところがある。基本的に行単位でしか編集ができないし、任意のセルに自由に移動し入力することができない。 そこでセル毎に一つ一つコントロールを配置していく方法が求められるのだが、固定した行数とは限らないのでどうしても動的に作成したい。しかし動的コントロールの作成は結構面倒で分からない点多い。いろいろ試行錯誤してようやく何とかものになったノウハウをここで紹介したい。実際の業務で使っている仕組みなので参考になると思う。 表(コンテナ)は「Table Web コントロール」を使っている。 これはそもそも動的コントロール用に用意されたと言っても良い代物で、固定の表に使うにはどう考えても無駄でしかない。 サンプルはダウンロードして使えます。→ DynamicTableCreate.lzh DynamicTableCreate
以前のTips「DataGridViewの行ヘッダ(列ヘッダ)にContextMenuStripを関連付ける」のサンプル画面に行番号の実例がさりげなく写っていた。 これをご覧になった方からその方法が知りたいという要望があったので今回はこれを紹介する。(コードだけの紹介なのでイメージは上記を参照してください) 注:この方法はサイトを調べてC#のサンプルを見つけ、そこからVB用に直しただけの代物です。但し、Tipsとして公開するにあたり理解しやすいように個々のプロパティを直接引数に配置せず、一旦変数に置き換えてあります。また、行番号の右揃えの方法も追加しました。 その仕組みをみると簡単ではあるが泥臭い(APIで無理やり描画させているような感じの)もので、この程度の機能なら標準プロパティ等で指定できるようにすべきだと思う。 '///// 行ヘッダに行番号を描画 ///// Private Sub
以前、VB6のようにコントロール配列が使えないため、沢山あるテキストボックスにデータを代入するのに便利な方法を取り上げたが、これはWebアプリ(ASP.NET)でしか使えない方法だった。 「コントロール配列-その2」 Windowアプリ(VB.NET)ではどうやって実現するか調べてみた。 そして、@ITの「Windowsフォーム上のすべてのコントロールを列挙するには?」を使うことで実現できることがわかった。 サンプルとして取り上げたのは、起動時に全てのTextBoxのTextプロパティを初期化し、Labelコントロールの中でもBorderStyleがFixed3Dのものだけを初期化するというものである。 まず、@ITのサンプルにある「すべてのコントロールを再帰的に取得するメソッド」を汎用モジュールとする。これはForm上の全てコントロールを一つの配列に取り込むものである。 Public F
以前に「INIファイルの読み書き」をVB6とVB.NETの比較で紹介したが、VB2005になってこれに代わるとっても楽な方法が追加されたので紹介する。 あまりに楽チンなのでINIファイルを使うことはもう無いだろうと思うほどだ。 VB.NETでもそれに類するものはあったが扱いが面倒だった。それがVB2005になってからは、まるでプロパティを設定するのと同じ感覚でできるのでつい利用したくなってしまう。 1.サンプル画面(TextBoxとCheckBoxの内容を保存) 2.TextBoxのプロパティから(ApplicationSettings)の(PropertyBinding)を選択 3.規定値のTextプロパティのほかいろんなプロパティを保存できる 4.「新規」から設定名(Name)を入力する 5.CheckBoxの場合はCheckedプロパティを指定 6.設定値はapp.configに記録
このページを最初にブックマークしてみませんか?
『なっちゃんのプログラミングTips』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く