C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■87254 / )  DataGridViewの編集モード移行
□投稿者/ big7_8 (1回)-(2018/05/01(Tue) 19:43:58)
big7_8 さんの Web サイト

分類:[VB.NET/VB2005 以降] 

【挨拶】
初めまして、Big7_8と申します。4/8よりVB.NETのcodingを開始しました新参者です。
宜しくお願い致します。

OS : win7 Professional 32bit
言語 : Visual Basic ツール 2.7.0-beta3-62715-05

【背景】
これまではF-BASICを利用しており、win7上で正常に動作しておりました。しかし、4月上旬に
解決不能の不具合(散々検討しましたが、プログラム上のバグではありません)を発見しまし
た。ですが、同言語は既にサポートは終了している上に、win7以降は未対応。已む無く、
開発言語を変更することに致しました。
幸い、マイクロソフトさんがVB.NETを無償で提供されているので、4/8にダウンロードさせて
頂いたのがスタートです。何分、オブジェクト指向のcodingは初めてなので、金城俊哉さんの
「VisualBasic2017 パーフェクトマスター」を読みました。読んだつもりですが、実は全然
解っておりません。解らないなりに、ネットの諸先輩方のコードを拝借して、ここまで来ま
したが、以下の問題点に引っかかり1週間以上停滞しています。

【やりたいこと】
取り敢えず、サンプルデータの保存先及び本体の参照先は皆様の環境に合わせて変更してください。
コードを見ればわかりますが、株価のデータベースです。
DataGridViewを表示したら、編集モードに移行したい。
今はまだ、codingしていませんがSub RnxCheck()の部分はマウスクリックによるイベントに
変更する予定です。

【問題点】
私の拙い理解では
Me.Show()で、DataGridViewを表示
dgv.BeginEdit(True)で、編集モードに移行
となるはずですが、編集モードに移行しているならば、その時点でプログラムの進行がストップし、
MessageBox.Show("a1")は、即表示されないはず。もしかして、間違っていました?
しかし、MessageBox.Show("a1")は、即実行されてしまいます。

https://www.weblio.jp/content/DataGridView.BeginEdit+%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89

を参照すると、「セルの型が IDataGridViewEditingCell インターフェイスを実装していない場合にも、
false が返されます。」とあります。それで、
Public Interface IDataGridViewEditingCell
End Interface
Implements IDataGridViewEditingCell
を追加しましたが、状況は変わりません。
私がインターフェイスの概念を理解していないのが原因と思われますが、どうすればいいのか
超初心者の私には解決の糸口が見つかりません。
諸先輩方、宜しくご指導の程、お願い致します。



【サンプルデータ生成コード】

Public Structure Jstock
Public dteDate As Date
Public N20O As Single
Public N20H As Single
Public N20L As Single
Public N20C As Single
End Structure


Public Class Form1
Inherits System.Windows.Forms.Form

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim js As Jstock
FileOpen(1, "e:\data\test4.dat", OpenMode.Random, , , Len(js))

js.dteDate = #4/1/2014#
js.N20O = 21657.87
js.N20H = 21719.43
js.N20L = 21591.39
js.N20C = 21660.28
FilePut(1, js, 1)
js.dteDate = #4/2/2015#
js.N20O = 21801.41
js.N20H = 21917.35
js.N20L = 21746.69
js.N20C = 21778.74
FilePut(1, js, 2)
js.dteDate = #4/3/2016#
js.N20O = 21801.41
js.N20H = 21917.35
js.N20L = 21746.69
js.N20C = 21778.74
FilePut(1, js, 3)
js.dteDate = #4/4/2017#
js.N20O = 21801.41
js.N20H = 21917.35
js.N20L = 21746.69
js.N20C = 21778.74
FilePut(1, js, 4)
js.dteDate = #4/5/2018#
js.N20O = 21801.41
js.N20H = 21917.35
js.N20L = 21746.69
js.N20C = 21778.74
FilePut(1, js, 5)

FileGet(1, js, 1)
Trace.WriteLine(js.dteDate)
Trace.WriteLine(js.N20O)
Trace.WriteLine(js.N20H)
Trace.WriteLine(js.N20L)
Trace.WriteLine(js.N20C)
FileGet(1, js, 2)
Trace.WriteLine(js.dteDate)
Trace.WriteLine(js.N20O)
Trace.WriteLine(js.N20H)
Trace.WriteLine(js.N20L)
Trace.WriteLine(js.N20C)

FileClose(1)
End Sub
End Class



【本体コード】

Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.IO


Public Interface IDataGridViewEditingCell

End Interface


Public Structure Jstock
Public dteDate As Date
Public N20O As Single
Public N20H As Single
Public N20L As Single
Public N20C As Single
End Structure


Public Class Config
Public Shared dteDate As Date
Public Shared N20O As Single
Public Shared N20H As Single
Public Shared N20L As Single
Public Shared N20C As Single

Public Shared RN1 As Integer
Public Shared RNX As Integer
Public Shared COUNT As Integer
End Class


Public Class Form1
Inherits System.Windows.Forms.Form

Implements IDataGridViewEditingCell

Shared dgv As DataGridView

Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Dim js As Jstock
FileOpen(1, "e:\data\test4.dat", OpenMode.Random, , , Len(js))
Config.RN1 = LOF(1) / Len(js)

Config.RNX = Config.RN1


Do While Config.RNX > 0
DataGet()
If Config.COUNT = 0 Then InitializeDGV()
dgv.Rows.Clear()
FillDGV()

Me.Show()
dgv.Select()
dgv.CurrentCell = dgv(0, 4)
dgv.BeginEdit(True)
MessageBox.Show("a1")
RnxCheck()
Loop

If Config.RNX = 0 Then
FileClose(1)
Application.Exit()
End If

End Sub

Public Sub New()
dgv = New DataGridView()
dgv.Dock = DockStyle.Fill
dgv.AllowUserToAddRows = False
dgv.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
Me.Controls.Add(dgv)
End Sub


Public Sub RnxCheck()
Dim GetString As String = dgv.CurrentCell.Value

Select Case GetString
Case ""

Case "<<"
Config.RNX = Config.RNX - 100
If Config.RNX < 1 Then Config.RNX = 1
Case "<"
Config.RNX = Config.RNX - 1
If Config.RNX < 1 Then Config.RNX = 1
Case "END"
Config.RNX = 0
Case ">"
Config.RNX = Config.RNX + 1
If Config.RNX > Config.RN1 Then Config.RNX = Config.RN1
Case ">>"
Config.RNX = Config.RNX + 100
If Config.RNX > Config.RN1 Then Config.RNX = Config.RN1
Case Else
Config.RNX = Config.RN1 '仮
End Select

End Sub



Sub InitializeDGV()
Dim column1 As New DataGridViewTextBoxColumn
column1.HeaderText = " 銘柄 "
dgv.Columns.Add(column1)

Dim column2 As New DataGridViewTextBoxColumn
column2.HeaderText = "OPEN"
dgv.Columns.Add(column2)

Dim column3 As New DataGridViewTextBoxColumn
column3.HeaderText = "HIGH"
dgv.Columns.Add(column3)

Dim column4 As New DataGridViewTextBoxColumn
column4.HeaderText = "LOW"
dgv.Columns.Add(column4)

Dim column5 As New DataGridViewTextBoxColumn
column5.HeaderText = "CLOSE"
dgv.Columns.Add(column5)

Config.COUNT = 1

End Sub

Sub FillDGV()
dgv.Rows.Add("日付等", Config.dteDate, Config.RNX)
dgv.Rows.Add()
dgv.Rows.Add("日経平均", Config.N20O, Config.N20H, Config.N20L, Config.N20C)
dgv.Rows.Add()
dgv.Rows.Add("<<", "<", "END", ">", ">>")
End Sub

Sub DataGet()
Dim js As Jstock

FileGet(1, js, Config.RNX)
Config.dteDate = js.dteDate
Config.N20O = js.N20O
Config.N20H = js.N20H
Config.N20L = js.N20L
Config.N20C = js.N20C
End Sub

End Class

返信 編集キー/


管理者用

- Child Tree -