2009年11月24日火曜日

禁煙への道

禁煙ブームらしい・・・

本当か?・・・

統計では禁煙傾向のデータが出揃っているとういうが・・・

きっかけがつかめないままずるずると今日まできているという人が大半でなないのか?


ほんと、こんな自問自答を繰り返している毎日だった。

1時間以内には吸わない。ニコチン量を減らす。そして禁煙に突入したい。

そう思うだけなら誰でもできるぞ!!

タバコを吸わない人には冷たくあしらわれる。
しかしそう言わないでほしいんだな。そう思うことからすべてが始まるのだから。頭ごなしにいわれるとやる気さえそぎ落とされてしまう。

きっかけがほしいのだ。自分に見返りになるなにかが。

そしてその日は思わぬところからやってきた。

溶連菌(猩紅熱)にかかった。

のどが痛い。熱もさることながらなんといってものどが痛い。

必然的にタバコを吸っていなかったのが気がついたら12時間以上。

その時は禁煙の決意などしていなかったので、久しぶりに喫煙すると、うえっ!痛っ。。。

痛いのが戻された感じになったので、そのまま大人しく寝た。

そして熱が3日目まで突入するとさすがに仕事も休んではいられない。

とにかく直さねばとひたすら寝ていたらタバコを2日間まるで吸っていなかった。


こっ・・・これは、チャンス?

やってみようという気持ちになった。さて・・・つづく

2009年11月22日日曜日

バレー全日本男子 ちょっと見直した

32年ぶりのメダルが確定…

少し前だと男子バレーはどうせ・・・
的なイメージがあってほとんど意識をしてみてなかった。

昨年、オリンピック出場を決めた瞬間、植田監督が倒れたシーンが印象的だったのだがその年のバレーの内容が今までとはたしかに違っていた。

今年は昨年の戦い方を裏付けるような結果かもしれない。
そう、今の全日本は歴代のなかでも最高水準でプレーしており世界のトップクラスともそれなりに渡り合えるように変貌をとげていた。

本当の意味ではまだかと思う部も見え隠れするが、以前なんかよりは比べ物にならないほどに肉薄している。


男子バレーの人気は今ひとつだが、あのプレーは本当にま近でみて頂きたいと切に思う。
芸術とまで思うクイック、カベのようなブロック、自分が着地する前にボールが床におちてしまうスパイク、そしてブロックのシャット!そして会場に響くボールの怒号のような爆音。
迫力満点だ!!

さらにはブロックの上から放たれるスパイク。最高到達点は3m50cm以上の攻防戦。

知れば知るほど高度な技術と駆け引きの行われる一瞬の攻防。


これらがすべて世界最高峰レベルの仲間入りをしたと思うプレーをしている。

うれしいことだ。ガンバレ日本!!!

2009年11月13日金曜日

MSAccess使いからVB.NETへの道 TextBox中の文字を他のTextBoxにドラッグアンドドロップその2

続きはそんなに大したことではないが、明細行の行コピーの手順としてはまず前提が大事になってくる。

TextBoxをひたすら配置するときに、Webでよく使われている手法として行カウントのNoを含めるという名前付けを行う。

これをVBでも行いloop処理で書くプログラム数を減らすというものだ。
例えば 1行目の商品CDのTextBoxには

SYOHIN01

という具合。もちろん2行目はSYOHIN02 ・・・
そこでドラッグアンドドロップをするときに使う文字としてSYOHIN02を使用するわけだ。

Right関数で右2列を使用すれば現在の行数がわかるのでその同じ行のすべての情報を取得すればよい。

そこで1行がまた大量の場合SYOHINなどの名前をつけてしまうと各名称をタイプしなければならないのでお勧めする名称は

Column0101

とすると良いだろう。
1行の全項目を取得する場合にもLoopが使えるのでソースが激減する。

また名称で判別したい場合は、関数にしてしまうのも手だ。

Public Function SYOHIN()
SYOHIN = "01"
End Sub

個別に処理をしたい場合に書いたソースの項目名がすべて数字だと何が何だか解らなくなってしまうのを防ぐためだ。

これでコントロール名称を動的に取得すればよい。
使い分けとしてまとめると

●項目を単体で制御する場合は関数名を使い動的にコントロール名で行う。

●項目全体を一度に行う場合はコントロール名称をそそまま使用しLoop制御で一気にたたみかける。

次回はその使用例を覚書としてまとめようと思う。

2009年11月12日木曜日

MSAccess使いからVB.NETへの道 TextBox中の文字を他のTextBoxにドラッグアンドドロップその1

邪道な方法
Accessの様な行明細で同じ内容の行をコピーして増やしていきたい・・・
そういう要望は多々ある。
作る方はあまりお勧めしない運用であるが、見積の画面となるとそうはいかなくなってくる。
この方法は明細行を1つ1つTextBoxで作成した場合である。
(明細形式のコントロールでは想像着かない為)
そこで少し奮闘してみた。
まずは受ける方のTextBoxプロパティでAllowDropをTrueに必ず変更する。
これをしなければうんともすんとも言わない。

TextBoxのあるフォームに以下のコードを書き込む。

'受ける方のCD TextBox2
Private Sub TextBox2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles _ TextBox2.DragEnter
'ドラッグされている内容が文字列型に変換可能な場合
If e.Data.GetDataPresent(GetType(String)) Then
'コピーを許可するようにドラッグ元に通知する
e.Effect = DragDropEffects.Copy
End If

End Sub

Private Sub TextBox2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles _ TextBox2.DragDrop

If Me.ActiveControl.Name <> "TextBox1" Then
Me.TextBox2.Text = e.Data.GetData(GetType(String))
End If
End Sub

'ドラッグする方
Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles _ TextBox1.MouseDown

Me.ActiveControl.DoDragDrop(Me.ActiveControl.Name.ToString, DragDropEffects.Copy)

End Sub

ちなみにこの例はTextBox2の値に"TextBox1"という文字が入る。Me.ActiveControl.Name.ToString を文字として指定しているからである。
Me.ActiveControl.Text.ToStringとすればそのTextBoxの文字をドラッグアンドドロップすることが可能であるが、それでは1つだけがコピーされるだけである。

なのでまずは方法が解ったところで次回その取り回しをリファレンスしたいと思う。

2009年11月10日火曜日

MSAccess使いからVB.NETへの道 Handles後のコマンド登録

同じイベントの発生する項目が大量にあった場合に昔ではひたすらイベントに書き込んでいた記憶がある。

しかしHandles後に指示するコマンドは複数登録が出来1箇所のソースで完了できる仕様になっている。

が、なかなか便利かとおもいきや大量にある場合はやはり大変なのでなんとかいい方法はないかと思ったとき、エクセルと秀丸のようなテキストエディタを使ってみた。

エクセルで元ネタを作成し、値の貼り付けでテキストにしてあげてから、デキストエディタに一度貼り付け必要であれば編集、その後VBのソースに貼り付ける。

一度エクセルで項目名を作成しておけば、同じようなことがあった場合次からはかなり早い。

この場面はAccessのようなアプリを作成していると特に遭遇する事態であった

2009年11月7日土曜日

MSAccess使いからVB.NETへの道

VBでMSAccessの様に動かす・・・

これに至るまでに長かったこと。。。

この問題の最大はなんと言っても表形式フォームの表現だろう。


なんだかんだ言われたい放題のMSaccessだがこの表形式フォームの機能はよく考えられていると思う。


ただの表示だけならVBでもなんとかなる…何度もそう思った

問題は入力する表形式フォームで複雑に制御をしなければらなない場合だ。

特に入力の値に応じてEnterによるTab移動を駆使するといったことを実現出来るものはVBで用意されたコントロールにはないということだ。

この制御はMSAccessにとってたやすい表現であった為、VBにもあるのでは?という甘い期待を抱いていたのだが実現が難しいというのが分かるまでに長かった。

そうするとTextBoxをひたすら配置するしかないという結論である。


MSAccessの様にVBを使う条件
●一覧で表示する場合行数が未定の場合に使い分けるコントロール
 A) DataGridview
  これは1行で表示出来るものに限られる。
  EnterでのTab移動は単純な動きだけは可能なので編集する場所が少ない場合に有効である

 B)DataRepeater
  表示だけなら1行の中に自由にテキストボックスを配置が出来てAccessの表形式フォームの見栄えが簡単に出来る
  しかしVisualBasicPowerPack3.0をインストールしてから使用するものなので配布時に注意する必要がある
  すごく期待したがこれもEnterのTab移動が困難

 C)ListView
  これはAccessで言うリストボックス。そう思って使おう
  なれればかなり便利。それほど難しくないし

 D)TextBoxを力技で配置
  入力インターフェイスを自在に行うのならやはりこの方法
  入力行数を固定して使う
  それよりデータが多い場合はページング処理を施す

それでもう一つ重要な条件で、クエリは手書きです。AccessのGUIみたいなものはありません。あるにはありますが実現できることはかなり制限されます。クエリのGUIからの脱却は考えることです。(あれに変わるわかりやすいものはないと思いますが・・・)


という具合の住み分け方法に落ち着いた。


後にそのTextBoxの力技で配置の大まかな方法をレビューしようと思う。

MSAccess使いからVB.NETへの道

ようやくVB.NETの使い方がなんとなく分かってきた。
MSAccessからの脱却方法を自分なりに今後まとめておこうと思う。

その前にちょっとこまった現象

VB2008ExpressEditionでContextMenuStripコントロールを使用していたところ強制終了が突然発生する。

なかなか油断しているところでやられてしまうので、何度か頓挫してしまった。

どうにかならないものか・・・