投稿

[VB.NET]テキスト等チェンジイベントを有効化・無効化する

テキスト等のチェンジイベントは便利ですが、初期化(文字をクリア)の時などにも反応してしまいます。そういう時にイベントを動かさないようにするための方法です。 今回はDGV(データグリッドビュー)内のセル(1マス)バリューチェンジイベントで行います。 例     'DGV内セルテキストチェンジイベント     Private Sub DGV_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) '↑本来は末尾に、Handles DGV.CellValueChangedと記述されているが、削除する         'ここにチェンジイベントが起きた時の動きを記述     End Sub     'イベント有効化     AddHandler DGV.CellValueChanged, AddressOf DGV_CellValueChanged     'イベント無効化     RemoveHandler DGV.CellValueChanged, AddressOf DGV_CellValueChanged 説明 AddHandler イベント本体 , AddressOf イベント名 RemoveHandler  〃   ,     〃 イベントに、イベント本体?を関連付け、あるいは関連を外します。 コメント 普通、記述時にイベントをデザイナーのダブルクリックなどで呼び出しますが、自動で Handles DGV.CellValueChanged のように、イベント末尾にイベント本体が記述されています。それを削除する事で何にも反応しないコードになります。その後、AddHandlerで関連付けする、外すことで有効化、無効化できます。テキスト等の切り替わりを監視するタイミングを自由に変えられるので、知っていると便利です。

[SQL Server]データテーブル内最新の情報のみを表示させる 説明編

今回の記事はSQLserver内での記述です。   前回の記事 の詳細説明です。 最新のデータのみを表示させたい場合のselect文です。 例      テーブル名 テストテーブル         コード seq     その他データ・・・・・   001        1         ---  --- ---     001        2         ---  --- --- の場合     002        1         ---       ---       --- select  test.コード, test.seq, test2.その他のデータ1,test2.その他のデータ2・・・・ from (select コード,max(seq) as seq  from テストテーブル        group by コード)  as test left join テストテーブル as test2 on test.コード = test2.コード and test.seq = test2.seq order by  convert (integer, test.コード)  結果下のように表示されます。         コード seq     その他データ・・・・・     001        2         ...

[SQL Server]データテーブル内最新の情報のみを表示させる

今回の記事はSQLserver内での記述です。 まず状況の説明です。 データベースのテーブルには primarykey(主キー:データを識別するコードなど被らないもの) が2つ設定されている(複合キー)前提です。 一つはコード、一つはseq(シーケンス番号という)。 過去の情報も維持したい場合などにコードのみではなく、シーケンス番号も使います。 データベースのテーブル↓         コード seq     その他データ・・・・・   001        1         ---  --- ---     001        2         ---  --- --- 過去の情報も維持すると、このようにコードが被ります。 普通はコードでレコード(1行)を識別するので、被るとエラーになります。 seqは新しい情報ほど数が大きくなるように登録される前提で、 コードが被っても登録できるように複合キーにしているわけです。 こういった状況での、 最新のデータのみを表示させたい場合のselect文です。 例      テーブル名 テストテーブル         コード seq     その他データ・・・・・   001        1         ---  --- ---     001        2         ---  --- --- の場合     002        1         ---...

[VB.NET]SQLserverへの接続、テーブル作成

データベースからデータテーブルを取得し、データグリッドビュー(エクセル表みたいなもの)に表示する。 例  (説明有り) (Windows認証の場合です)    ' 変数宣言    Dim serverMei as string = 'ここにサーバー名を記述    Dim DBmei as string = 'データベース名を記述    Dim SQLbun as string = 'SQL文を入れておく select文など    ' 接続するための何かを変数宣言    Dim cn = New System.Data.SqlClient.SqlConnection()      '接続に必要な情報を記述               '(サーバー名、データベース名、セキュリティ方式?、タイムアウト(秒))             cn.ConnectionString =                     "data source = " & serverMei &                     ";initial catalog = " & DBmei &                     ";integrated security = SSPI" &                     ";connection timeout = 30;"  ' 接続   ...

[VB.NET]コンボボックスの1アイテムに2つ以上の値を持たせる

2つの値、つまりIDと名前など (001, 太郎)を、コンボボックスComboBox(プルダウンメニュー)に入れる。そして選択アイテムとして名前の方を表示したい時の方法です。IDは内部データとして隠れます。 例     'クラス作成     Public Class CBList ' 変数宣言         Private idV As String         Private nameD As String ' ここで値を受け取る         Public Sub New(ByVal ID As String, ByVal Name As String)             idV = ID             nameD = Name         End Sub ' IDプロパティ宣言         Public ReadOnly Property ID() As String             Get                 Return idV             End Get         End Property ' Nameプロパティ宣言         Public ReadOnly Property Name() As String             Get           ...

[VB.NET]8ケタの文字列を日付に変換する 説明編

前記事の例   Dim moziRetu As String = Textbox1.text    Dim hiduke As Date   If Date.TryParse( Format(CInt(moziRetu), "####/##/##") , hiduke) Then        TextBox1.Text = Format(hiduke, "yyyy/MM/dd")   End If 説明 CInt(文字など)・・・ 文字などを数値型に変換する。文字が数字に変換できない場合エラーが出ます。 Format( 数, "表示方式")・・・ 主に数字を好きな表示方式に変える。 "####/##/##" こうすると#には数が当てはめられる。間に文字を入れたり計算式を入れたりと 自由度が 高いです。 型.TryParse( 文字など, 変数)・・・ 文字などを変換したい型に変換しようと試みる。変換できると変数に代入される。 変換出来なくてもエラーは出ず、変数には何も代入されない。Ifと組み合わせると変換出来たら分岐するというように使えて便利です。 コメント Formatで/スラッシュを入れた時点で日付表示は出来ているが、 ありえない年月日になってしまう可能性があるため(20月63日など)、 実際にTryParseで日付型に変えてから表示しています。 こういうの結構忘れます... 以下完成形のメモ(相互変換可能)     ''' <summary>     ''' 年月日相互変換     ''' </summary>     ''' <param name="hatiketa"></param>     ''' <returns></returns>     Private Function DateConvert(ByVal hatiketa As String, ByVal mode As String) As St...

[VB.NET]8ケタの文字列を日付に変換する

テキストボックス1に入力された8ケタの数字(文字列)を日付(0000/00/00)に変換する 例   修正済み '変数宣言   Dim moziRetu As String =  Textbox1.text     Dim hiduke As Date '文字列を数値型に変換。/スラッシュを挿入 'それが日付型に変換できるか確認し、変換出来たらテキストボックスに表示   If Date.TryParse( Format(CInt(moziRetu), "####/##/##") , hiduke) Then          TextBox1.Text = Format(hiduke, "yyyy/MM/dd")   End If 説明 細かな説明は後日します。ポイントは、 日付型に変換するには1111/11/11のようにスラッシュが入っていなければならない ということです。そのため文字型を一旦数値型にしてFormatをつかい/スラッシュを挿入しています。 コメント 個人的にプログラムコードが長く行が増えるほど読む気がなくなります。(上司には短くするより見やすさをと助言をもらってますがまだ慣れません^^;) なので省きましたが、入力された文字が数字ではなかった場合や、間に数字でないものが入っていた場合のエラー防止に下記のコードを先頭に挿入すると便利です。 変数宣言   Dim mozi As String = String.Empty ループして一文字ずつ取り出し、   For i = 0 To Len(TextBox1.Text) - 1         mozi = TextBox1.Text.Substring( i, 1) 数値型に変換できるか確認し、(変換はせずに)結合          If IsNumeric(mozi) Then         ...