Как я могу динамически отображать несколько меток со значениями одна под другой без повторений?
Я пытаюсь создать приложение, которое ищет строку в определенном столбце файла excel, и если строка найдена, отобразите соответствующее значение столбца для Ex: скажем, я ищу строку в столбце файла excel "N", если строка, которую я ищу, найдена, то отобразите значение столбца "E"той же строки.Дело в том, что мой код отображает одно значение несколько раз в нескольких метках второй формы.
Что я уже пробовал:
Форма 1:
Imports Excel = Microsoft.Office.Interop.Excel Imports Microsoft.Office.Interop.Excel Imports System.Globalization Imports System.Runtime.InteropServices Public Class Form1 Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim xlApp As Excel.Application Dim xlWorkBook As Excel.Workbook Dim xlWorkSheet As Excel.Worksheet Dim range As Excel.Range Dim Obj As Object Dim pass As String If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then Dim sr As New System.IO.StreamReader(OpenFileDialog1.FileName) MessageBox.Show("You have selected" + OpenFileDialog1.FileName) 'sr.Close() End If xlApp = New Excel.Application xlWorkBook = xlApp.Workbooks.Open(OpenFileDialog1.FileName) xlWorkSheet = xlWorkBook.Worksheets("sheet1") range = xlWorkSheet.UsedRange For rCnt = 1 To range.Rows.Count For cCnt = 14 To range.Columns.Count If xlWorkSheet.Cells(rCnt, cCnt).value = "3" Or xlWorkSheet.Cells(rCnt, cCnt).value = "4" Or xlWorkSheet.Cells(rCnt, cCnt).value = "5" Or xlWorkSheet.Cells(rCnt, cCnt).value = "6" Or xlWorkSheet.Cells(rCnt, cCnt).value = "7" Or xlWorkSheet.Cells(rCnt, cCnt).value = "8" Or xlWorkSheet.Cells(rCnt, cCnt).value = "9" Or xlWorkSheet.Cells(rCnt, cCnt).value = "10" Then Obj = CType(range.Cells(rCnt, "E"), Excel.Range) 'MessageBox.Show(Obj.value) Foo = Obj.value Form2.Show() End If Next Next xlWorkBook.Close() xlApp.Quit() releaseObject(xlApp) releaseObject(xlWorkBook) releaseObject(xlWorkSheet) End Sub Private Sub releaseObject(ByVal obj As Object) Try System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) obj = Nothing Catch ex As Exception obj = Nothing Finally GC.Collect() End Try End Sub End Class
Формы Form2:
Imports System.Linq Imports System.Drawing Public Class Form2 Private Sub Panel1_Paint(sender As Object, e As PaintEventArgs) Handles Panel1.Paint Dim label As New Label() Dim count As Integer = Panel1.Controls.OfType(Of Label)().ToList().Count label.Location = New Point(10, (25 * count)) 'label.Size = New Size(40, 20) label.Name = "label_" & (count + 1) label.Text = Foo '& (count + 1) label.AutoSize = True Panel1.Controls.Add(label) Dim button As New Button() button.Location = New System.Drawing.Point(250, 25 * count) button.Size = New System.Drawing.Size(60, 20) button.Name = "Print" & (count + 1) button.Text = "Print" '& (count + 1) AddHandler button.Click, AddressOf Button_Click Panel1.Controls.Add(button) MessageBox.Show(Foo) End Sub Private Sub Button_Click(sender As Object, e As EventArgs) Dim button As Button = TryCast(sender, Button) MessageBox.Show(button.Name + " clicked") End Sub End Class
МОДУЛЬ:
Module Module1 Public Foo As String End Module
Ralf Meier
Задумывались ли вы об использовании DataGridView (который почти похож на Excel-лист) для отображения ваших данных ?
Member 12712519
Нет, сэр, так как я новичок в visual basic. Не могли бы вы мне помочь?
Ralf Meier
Да ... конечно.
Сначала возьмите элемент управления DataGridView и поместите его в свою форму.
Теперь добавьте столбцы по мере необходимости для вашего проекта-расположите их по мере необходимости для вас.
Теперь вы можете вставлять свои данные с добавлением строк.
Я предлагаю вам сначала сделать эти шаги, и когда у вас появится новая точка, в которой вы застряли, вы дадите мне обратную связь (или зададите новый вопрос)
CHill60
Кстати-будьте осторожны, как вы помечаете свои вопросы. Я взял это, потому что я регулярно проверяю сообщения на VB6. Это не VB6.