• VB.net编程中可能用到的边边角角(一) —— 反射添加Form、向Excel中写值


    1.反射添加某Form到另一个Form

    (1)新建工程,类型ClassLibrary(名为ClassLibrary1),在工程中添加Item,类型WindowsForm(名为Form1)。

    (2)任意编辑Form1,保存,编译工程,找到DLL文件,存放在某位置(C:\Documents and Settings\l\My Documents\Visual Studio 2008\Projects\WindowsApplication2\ClassLibrary1\bin\Debug\ClassLibrary1.dll) 

    (3)主界面上Button1作用:将Form1添加到主界面。代码:

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim myas As Assembly
            myas = Assembly.LoadFrom("C:\Documents and Settings\l\My Documents\Visual Studio 2008\Projects\WindowsApplication2\ClassLibrary1\bin\Debug\ClassLibrary1.dll"’反射路径,自行修改或存在XML中。
            Dim t As Type = myas.GetType("ClassLibrary1.Form1")
            Dim obj As Object = Activator.CreateInstance(t)

            Dim frm As Form = CType(obj, Form)

            frm.TopLevel = False
            Me.Panel1.Controls.Add(frm) ’主界面上的Panel
            frm.FormBorderStyle = Windows.Forms.FormBorderStyle.None ’去掉Form四周边框,否则太丑,还占地方。。。
            frm.Height = 100
            frm.Width = 500
            frm.Left = 0
            frm.Top = (Me.Panel1.Controls.Count - 1) * 100
            frm.Show()

        End Sub

    (4)Button2作用:从后向前删除1个Form1

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Try
                Me.Panel1.Controls.RemoveAt(Me.Panel1.Controls.Count - 1)
            Catch ex As Exception

            End Try
        End Sub

    (5)Button3作用:Form1上有三个TextBox(TextBox1,TextBox2,TextBox3),点击后分别计算各个Form1中的TextBox1,TextBox2,TextBox3的总和。

            For i = 0 To Me.Panel1.Controls.Count - 1
                For j = 0 To Me.Panel1.Controls(i).Controls.Count - 1
                    If Me.Panel1.Controls(i).Controls(j).Name = "TextBox1" Then
                        If Me.Panel1.Controls(i).Controls(j).Text <> String.Empty Then
                            total1 = total1 + Integer.Parse(Me.Panel1.Controls(i).Controls(j).Text)
                        End If
                    ElseIf Me.Panel1.Controls(i).Controls(j).Name = "TextBox2" Then
                        If Me.Panel1.Controls(i).Controls(j).Text <> String.Empty Then
                            total2 = total2 + Integer.Parse(Me.Panel1.Controls(i).Controls(j).Text)
                        End If
                    ElseIf Me.Panel1.Controls(i).Controls(j).Name = "TextBox3" Then
                        If Me.Panel1.Controls(i).Controls(j).Text <> String.Empty Then
                            total3 = total3 + Integer.Parse(Me.Panel1.Controls(i).Controls(j).Text)
                        End If
                    End If
                Next
            Next

    2.向Excel中写值

    (代码最上方加上Imports Excel = Microsoft.Office.Interop.Excel)

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.SaveXls()
            System.GC.Collect()
        End Sub

        Private Sub SaveXls()
            Dim saveDialog As New SaveFileDialog ’保存Excel路径的Dialog
            saveDialog.FileName = ComboBox1.Text + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"
            saveDialog.Filter = "xls | *.xls"
            If saveDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
                Dim xlapp As Excel.Application
                Dim xlwkbook As Excel.Workbook
                Dim xlwksheet As Excel.Worksheet
                xlapp = New Excel.Application
                xlwkbook = xlapp.Workbooks.Open("D:\abc.xls")  ’路径地址自行修改或写在XML中自行读取
                xlwksheet = xlwkbook.Worksheets(5) ’表示表单编号(sheet1,sheet2之类的),编号从1开始
                xlwksheet.Cells(6, 2).Value = nameTextBox.Text ’给第六行,第二列的格赋值(Excel行和列都是1开始)
                xlwksheet.Cells(11, 4).Value = workNameTextBox.Text
                xlwksheet.Cells(13, 4).Value = workPlaceTextBox.Text
                xlwksheet.Cells(15, 3).Value = priceTextBox.Text
                xlwksheet.Cells(26, 5).Value = companyTextBox.Text
                xlwkbook.SaveAs(saveDialog.FileName)
                xlwkbook.Close()
                xlapp.Quit()
                xlapp = Nothing
                xlwkbook = Nothing
                xlwksheet = Nothing
            End If
        End Sub

      在几个文本框中输入值后将值写入对应的Excel的对应Sheet的对应位置。然后保存。将保存方法和垃圾回收分开写可以杀死残留的Excel.exe进程(垃圾回收写在方法中会残留一个进程)。

      明天继续~

     

  • 相关阅读:
    使用PullToRefresh实现下拉刷新和上拉加载
    Java RandomAccessFile用法
    Java_io体系之RandomAccessFile简介、走进源码及示例——20
    获取Android设备唯一标识码
    MQTT协议简记
    ORMLite学习入门笔记
    service的生命周期
    android广播(内部类)使用
    intent 几种用法
    intent.setFlags方法中的参数值含义
  • 原文地址:https://www.cnblogs.com/zhangnn2fs/p/myCollection1.html
Copyright © 2020-2023  润新知