• ベストアンサー

コードの違いについて(VB2008)

dr-9の回答

  • dr-9
  • ベストアンサー率47% (24/51)
回答No.1

自分も詳しくは無いですが、例えば「DataGridView1」に代入するものが100箇所位有ったとして、(1)だと「DataGridView1」から「DataGridView2」に変更した場合、100箇所同じ修正が必要です。 (キーワードの一括置き換えはリスクを伴います。) (2)だと一箇所の修正で済みます。 (1)はダイレクトに処理を記述している為、内容は解りやすいが応用が利かない。 (2)は間接的に処理を記述しているので内容は多少解りずらいが、応用が利く。 (2)が用いられる理由は、修正箇所をなるべく少なくし、バグを出しにくくする書き方している為です。

akiaki2
質問者

お礼

dr-9さま、ご回答ありがとうございます。 後々のメンテナンス性を考慮している、ということですね。 確かにおっしゃる通り、納得できました。 もう一点気になっているのは、パフォーマンスについてです。 例えば(1)より(2)の方が速度が速いとか、メモリ使用量が少ない、というような差はあるのでしょうか。 今の一般的なPCなら気にならないレベルかもしれませんが、5~6年前のPCでもアプリケーションを動作させる可能性があるもので、もしご存じでしたらお教えいただけると大変助かります。 質問を重ねてしまって心苦しいのですが、よろしくお願いいたします。

関連するQ&A

  • VBの Datagridview 行削除コード

    VB2010でコーディングしています。(VB初心者です。) ネットでDatagridview 行削除コードを調べてボタンに実装したんですが、一回目は削除できるんですが 二回目が削除できません。(削除後にデータを再構築できていない?) ご教授お願いします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim DT As New DataTable DT = DirectCast(Me.DGV.DataSource, DataTable) Dim 削除 As Boolean = False '選択行の取得 For Each r As DataGridViewRow In Me.DGV.SelectedRows      Dim ID As String = DT.Rows(r.Index).Item("ID").ToString      (その他の処理) 'リスト上削除 Me.DGV.Rows.RemoveAt(r.Index) Next r End Sub

  • VB.NETで値や参照について ByRefなど

    VB.NETで値や参照について、まだ初学ですがよろしくお願いします。 VBは2008です。 以下のようなs文字列を参照引数にしたSetDataメソッドがあります。 ByRef s As Stringという引数は、SetData内でsを書き換えると、 呼び出したSetDataメソッド外でも中身が変わるので 私のByRefの認識ではポインタと解釈しています。間違っているでしょうか? SetData(1,1, buf)とすれば、DataGridViewの中は、「初期値」という文字が表示されます。 別のメソッド(KaKikae)でbufを"あ"という文字に変えた場合、SetDataメソッドを使わなくても 書き換わっていると思っていたのですが、実際実行してみると書き換わりません。 値や参照について理解が足りないからだと思いますがわかりません。 どのようにすれば、それが実現できるのでしょうか? Public Class HogeClass Private buf As String = "初期値" Private Sub SetData(ByVal x As Integer, ByVal y As Integer, ByRef s As String) As Boolean Dim dg As DataGridView dg = DataGridView1 dg.Item(x, y).value = s End Sub Private Sub KaKikae() buf = "あ" End Sub End Class

  • VB初心者です。コードの書き方が分かりません。

    VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • DataGridViewから値取得

    DataGridViewにボタンと項目2つが配置されています。 DataGridView1 DataGridView1.Columns("btn").HeaderText = "ボタン" DataGridView1.Columns("item1").HeaderText = "アイテム1" DataGridView1.Columns("item2").HeaderText = "アイテム2" ボタンを押すと、押した行のレコードを取得したいです。 ボタンのところを押下すると、 イベントハンドラで何行目か分かるサンプルをネットで見つけました。 惜しいですが、やりたいのと少し違いました。 'CellContentClickイベントハンドラ Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick Dim dgv As DataGridView = CType(sender, DataGridView) Dim test_item1 As String Dim test_item2 As String ' "btn"列ならば、ボタンがクリックされた If dgv.Columns(e.ColumnIndex).Name = "btn" Then MessageBox.Show((e.RowIndex.ToString() + "行のボタンがクリックされました。")) End If ' ここに押された行のitem1の値をセット ' test_item1 = (A) ' ここに押された行のitem2の値をセット ' test_item2 = (B) End Sub (A)、(B)に何を記述すれば値を取得できますか?

  • 時間の処理方法

    VB2008 ユーザーフォーム上に 時刻Label(現在時刻表示) ボタン1 時刻dgv DataGridViewを配置しています DataGridViewの列は一列で、文字列の時刻を表示させています(12:00) 行の時刻が現在時刻よりも以前の場合、セルに色を つけたいのですがうまくいきません Public Class 時刻一覧表Form Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If  Me.時刻dgv(0, 0).Value < 時刻Label Then         Me.時刻dgv(0, 0).BackColor = Color.Yellow End If End Sub End Class

  • このような使い方は間違っているのでしょうか?(VB.NET2002)

    このような使い方は間違っているのでしょうか?(VB.NET2002) Dim count As Int16 Private Sub JOB(ByVal x) x = x + 1 TextBox1.Text = x End Sub Private Sub Button1_Click(・・・・ JOB(count) End Sub

  • VB2005 DataGridViewにチェックボックスを追加する方法

    タイトル通りなのですが VB2005でDataGridViewにチェックボックスを追加したいです。 ############################################################### Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim chColumn As New DataGridViewCheckboxColmun DataGridView1.ColumnCount = 5 DataGridView1.Columns(0).HeaderText = "1" DataGridView1.Columns(1).HeaderText = "2" DataGridView1.Columns(2).HeaderText = "3" DataGridView1.Columns.Insert(4, chColumn) End Sub End Class ############################################################## Dim chColumn As New DataGridViewCheckboxColmun ↑で'型'DataGridViewCheckboxColmunが定義されていません となってしまいます。 どうすればよいでしょうか。。。。 プログラム初めて1週間の初心者なのでお手柔らかに よろしくお願いします。

  • DataGridViewの列スタイルについて

    開発環境  VB.NET  SQLServer2008 DataGridViewにDBから取得したデータを一覧表示させようと思っています。 テキストボックスの列、チェックボックス、コンボボックスの列を 追加させることはできたのですが、同一列に異なる種類のコントロールを 配置するということはできるのでしょうか? 例えば・・・ -------------- 行No |列1 -------------- 1   |□ -------------- 2   |□▼ -------------- ・行No1、列1のセルはチェックボックスのセルを表示する ・行No2、列1のセルはコンボボックスのセルを表示する 列を追加しているコードは以下の通りです。 Form_Load時に実行しています。 ------------------------------------------------------------- Private Sub initializeDgvTest() Dim dgv As DataGridView = Me.dgvTest dgv.Columns.Clear() dgv.AutoGenerateColumns = False Dim colLabel As New DataGridViewTextBoxColumn() colLabel.DataPropertyName = "LABEL" colLabel.Name = "LABEL" colLabel.HeaderText = "ラベル" dgv.Columns.Add(colLabel) Dim colVal As New DataGridViewCheckBoxColumn() colVal .DataPropertyName = "VALUE" colVal .Name = "VALUE" colVal .HeaderText = "値" dgv.Columns.Add(colVal ) End Sub ※データのバインドについて  DataTableをDataGridViewのDataSourceに設定しています。 ------------------------------------------------------------- 上記のコードでいうと、 「VALUE」列のコントロールの種類をセル単位で変更しようとしています。 何かいい方法がありましたら、アドバイスよろしくお願いします。 以上です。

  • DataGridViewの値を別フォームに

    こんにちは。 1つ教えて頂けないでしょうか。 Form1にDataGridViewがあり、どれか1行ダブルクリックすると Form2にForm1のDataGridViewの7列目の値の条件で抽出した結果を Form2のDataGridViewに表示したいのです。 Form1からの受け渡しデータはForm2のテキストボックス(条件)に表示させ 受け渡されて来たときは表示ボタンをクリックしなくてもForm2の DataGridViewは表示したいのです。 それぞれのFormは作成し、Form1は Private Sub dgv_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellDoubleClick Dim f As New Form2 f.txt条件 = Me.DataGridView.SelectedRows(0).Cells(7).Value f.ShowDialog() End Sub とコーディングしました。 Form2は表示されるのですが、データの受け渡しができていないし f.txt条件 = Me.DataGridView.SelectedRows(0).Cells(7).Valueの部分でキャストできませんのエラーに なります。 DataGridViewの選択した値を別のフォームに渡し、そのまま別フォームのDataGridViewを表示させたいのですが。 わかる方おられましたら、教えて頂けないでしょうか。 大変申し訳ありませんが、どうぞよろしくお願いします。

  • VB2005 DataGridViewの全角・半角混在のカラムの並び替え

    VB2005で開発、データベースはオラクル10gです。 全角・半角文字混在の項目を昇順で読み込み、DataGridViewの表に取り込みます。その後、ヘッダーカラムの並び替えを行うと順番が変わっていまいます。 具体的には 1.読み込み時は、空白は最尾、並び替え後は先頭にくる。 2.読み込み時、括弧(「[」)の半角と全角は別々に並んでいますが、並び替え後は半角と全角との区別はなく、並び替えられます。 カラムを別に設けて、コード体系を変換して、そのカラムを並び替えすればいいのでしょうか? コード体系の知識は弱いので、お教えください。 PRIVATE SUB BUTTON_CLICK(省略) DIM I AS INTEGER DIM S AS STRING FOR I = 0 TO DataGridView1.Rows.Count - 1 S = DataGridView1(1,I).VALUE '-----ここで変換?    DataGridView1(2,I).VALUE = S NEXT DataGridView1.Sort(DataGridView1.Column(2), _ System.ComponentModel.ListSortDirection.Ascending) END SUB よろしくお願いします。