承载 ComboBox 控件的 DataGridColumnStyle (VB.NET)

智能车竞赛卡丁快跑组:自动驾驶与人车交互技术实战解析 本文深入解析了智能车竞赛卡丁快跑组的技术核心,重点探讨了自动驾驶与人车交互两大模块的实战方案。文章详细拆解了从环境感知、路径规划到语音识别、命令执行的完整流程,并分享了基于单片机平台的调试心法与赛场经验,为参赛者提供了一套从零开始、分步攻坚的系统性备赛指南。 阅读详情

重写ComboBox类

Imports  System.Windows.Forms

Public   Class AutoCompleteComboBox
    
Inherits ComboBox
    
Public Sub New()
        
MyBase.New()
    
End Sub


    
Private mResetOnClear As Boolean = False
    
Protected Overrides Sub RefreshItem(ByVal index As Integer)
        
MyBase.RefreshItem(index)
    
End Sub


    
Protected Overrides Sub SetItemsCore(ByVal items As System.Collections.IList)
        
MyBase.SetItemsCore(items)
    
End Sub


    
Public Shadows Sub KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
        
Dim intIndex As Integer
        
Dim strEntry As String

        
If Char.IsControl(e.KeyChar) Then
            
If MyBase.SelectionStart <= 1 Then
                
If mResetOnClear Then
                    
MyBase.SelectedIndex = 0
                    
MyBase.SelectAll()
                
Else
                    
MyBase.Text = String.Empty
                    
MyBase.SelectedIndex = -1
                
End If
                e.Handled 
= True
                
Exit Sub
            
End If
            
If MyBase.SelectionLength = 0 Then
                strEntry 
= MyBase.Text.Substring(0, MyBase.Text.Length - 1)
            
Else
                strEntry 
= MyBase.Text.Substring(0, MyBase.SelectionStart - 1)
            
End If
        
ElseIf (Not Char.IsLetterOrDigit(e.KeyChar)) And (Not Char.IsWhiteSpace(e.KeyChar)) Then  '< 32 Or KeyAscii > 127 Then
            Exit Sub
        
Else
            
If MyBase.SelectionLength = 0 Then
                strEntry 
= UCase(MyBase.Text & e.KeyChar)
            
Else
                strEntry 
= MyBase.Text.Substring(0, MyBase.SelectionStart) & e.KeyChar
            
End If
        
End If

        
MyBase.DroppedDown = Char.IsLetterOrDigit(e.KeyChar)

        intIndex 
= MyBase.FindString(strEntry)
        
If intIndex <> -1 Then
            
MyBase.SelectedIndex = intIndex
            
MyBase.SelectionStart = strEntry.Length
            
MyBase.SelectionLength = MyBase.Text.Length - MyBase.SelectionStart
        
End If

        e.Handled 
= True
        
Exit Sub
    
End Sub


    
Public Property ResetOnClear() As Boolean
        
Get
            
Return mResetOnClear
        
End Get
        
Set(ByVal Value As Boolean)
            mResetOnClear 
= Value
        
End Set
    
End Property

End Class

实现类

Option   Strict   On
Option   Explicit   On  
Imports  System.Collections
Imports  System.ComponentModel
Imports  System.Drawing
Imports  System.Windows.Forms
Imports  System.Data

Public   Class DataGridComboBox
    
Inherits AutoCompleteComboBox
    
Public Sub New()
        
MyBase.New()
    
End Sub

    
Public isInEditOrNavigateMode As Boolean = True

End Class


Public   Class DataGridComboBoxColumnStyle
    
Inherits DataGridColumnStyle

    
Private xMargin As Integer = 2
    
Private yMargin As Integer = 1
    
Private Combo As DataGridComboBox
    
Private _DisplayMember As String
    
Private _ValueMember As String

    
Private OldVal As String = String.Empty
    
Private InEdit As Boolean = False

    
Public Sub New(ByRef DataSource As DataTable, _
                   
ByVal DisplayMember As Integer, _
                   
ByVal ValueMember As Integer)

        Combo 
= New DataGridComboBox
        _DisplayMember 
= DataSource.Columns.Item(index:=DisplayMember).ToString
        _ValueMember 
= DataSource.Columns.Item(index:=ValueMember).ToString

        
With Combo
            .Visible 
= False
            .DataSource 
= DataSource
            .DisplayMember 
= _DisplayMember
            .ValueMember 
= _ValueMember
        
End With
    
End Sub


    
Public Sub New(ByRef DataSource As DataTable, _
                   
ByVal DisplayMember As String, _
                   
ByVal ValueMember As String)

        Combo 
= New DataGridComboBox
        
With Combo
            .Visible 
= False
            .DataSource 
= DataSource
            .DisplayMember 
= DisplayMember
            .ValueMember 
= ValueMember
        
End With

    
End Sub


    
Protected Overloads Overrides Sub Abort(ByVal RowNum As Integer)
        Debug.WriteLine(
"Abort()")
        RollBack()
        HideComboBox()
        EndEdit()
    
End Sub


    
Protected Overloads Overrides Function Commit(ByVal DataSource As CurrencyManager, _
                                                  
ByVal RowNum As Integer) As Boolean
        HideComboBox()
        
If Not InEdit Then
            
Return True
        
End If

        
Try
            
Dim Value As Object = Combo.SelectedValue
            
If NullText.Equals(Value) Then
                Value 
= Convert.DBNull
            
End If
            SetColumnValueAtRow(DataSource, RowNum, Value)
        
Catch e As Exception
            RollBack()
            
Return False
        
End Try
        EndEdit()
        
Return True
    
End Function


    
Protected Overloads Overrides Sub ConcedeFocus()
        Combo.Visible 
= False
    
End Sub


    
Protected Overloads Overrides Sub Edit(ByVal Source As CurrencyManager, _
                                           
ByVal Rownum As Integer, _
                                           
ByVal Bounds As Rectangle, _
                                           
ByVal [ReadOnly] As Boolean, _
                                           
ByVal InstantText As String, _
                                           
ByVal CellIsVisible As Boolean)

        Combo.Text 
= String.Empty

        
Dim OriginalBounds As Rectangle = Bounds

        OldVal 
= Combo.Text

        
If CellIsVisible Then
            Bounds.Offset(xMargin, yMargin)
            Bounds.Width 
-= xMargin * 2
            Bounds.Height 
-= yMargin
            Combo.Bounds 
= Bounds
            Combo.Visible 
= True
        
Else
            Combo.Bounds 
= OriginalBounds
            Combo.Visible 
= False
        
End If

        Combo.SelectedValue 
= GetText(GetColumnValueAtRow(Source, Rownum))

        
If Not InstantText Is Nothing Then
            Combo.SelectedValue 
= InstantText
        
End If

        Combo.RightToLeft 
= Me.DataGridTableStyle.DataGrid.RightToLeft
        Combo.Focus()

        
If InstantText Is Nothing Then
            Combo.SelectAll()
        
Else
            
Dim [End] As Integer = Combo.Text.Length
            Combo.Select([
End], 0)
        
End If

        
If Combo.Visible Then
            DataGridTableStyle.DataGrid.Invalidate(OriginalBounds)
        
End If

        InEdit 
= True

    
End Sub


    
Protected Overloads Overrides Function GetMinimumHeight() As Integer
        
Return Combo.PreferredHeight + yMargin
    
End Function


    
Protected Overloads Overrides Function GetPreferredHeight(ByVal g As Graphics, _
                                                              
ByVal Value As Object) As Integer
        Debug.WriteLine(
"GetPreferredHeight()")
        
Dim NewLineIndex As Integer = 0
        
Dim NewLines As Integer = 0
        
Dim ValueString As String = Me.GetText(Value)
        
Do
            
While NewLineIndex <> -1
                NewLineIndex 
= ValueString.IndexOf("r/n", NewLineIndex + 1)
                NewLines 
+= 1
            
End While
        
Loop

        
Return FontHeight * NewLines + yMargin
    
End Function


    
Protected Overloads Overrides Function GetPreferredSize(ByVal g As Graphics, _
                                                            
ByVal Value As Object) As Size
        
Dim Extents As Size = Size.Ceiling(g.MeasureString(GetText(Value), _
                                           
Me.DataGridTableStyle.DataGrid.Font))
        Extents.Width 
+= xMargin * 2 + DataGridTableGridLineWidth
        Extents.Height 
+= yMargin
        
Return Extents
    
End Function


    
Protected Overloads Overrides Sub Paint(ByVal g As Graphics, _
                                            
ByVal Bounds As Rectangle, _
                                            
ByVal Source As CurrencyManager, _
                                            
ByVal RowNum As Integer)
        Paint(g, Bounds, Source, RowNum, 
False)
    
End Sub


    
Protected Overloads Overrides Sub Paint(ByVal g As Graphics, _
                                            
ByVal Bounds As Rectangle, _
                                            
ByVal Source As CurrencyManager, _
                                            
ByVal RowNum As Integer, _
                                            
ByVal AlignToRight As Boolean)
        
Dim Text As String = GetText(GetColumnValueAtRow(Source, RowNum))
        PaintText(g, Bounds, Text, AlignToRight)
    
End Sub


    
Protected Overloads Sub Paint(ByVal g As Graphics, _
                                  
ByVal Bounds As Rectangle, _
                                  
ByVal Source As CurrencyManager, _
                                  
ByVal RowNum As Integer, _
                                  
ByVal BackBrush As Brush, _
                                  
ByVal ForeBrush As Brush, _
                                  
ByVal AlignToRight As Boolean)

        
Dim Text As String = GetText(GetColumnValueAtRow(Source, RowNum))
        PaintText(g, Bounds, Text, BackBrush, ForeBrush, AlignToRight)
    
End Sub


    
Protected Overloads Overrides Sub SetDataGridInColumn(ByVal Value As DataGrid)
        
MyBase.SetDataGridInColumn(Value)
        
If Not (Combo.Parent Is Value) Then
            
If Not (Combo.Parent Is Nothing) Then
                Combo.Parent.Controls.Remove(Combo)
            
End If
        
End If

        
If Not (Value Is Nothing) Then Value.Controls.Add(Combo)
    
End Sub


    
Protected Overloads Overrides Sub UpdateUI(ByVal Source As CurrencyManager, _
                                               
ByVal RowNum As Integer, ByVal InstantText As String)
        Combo.Text 
= GetText(GetColumnValueAtRow(Source, RowNum))
        
If Not (InstantText Is Nothing) Then
            Combo.Text 
= InstantText
        
End If
    
End Sub


    
Private ReadOnly Property DataGridTableGridLineWidth() As Integer
        
Get
            
If Me.DataGridTableStyle.GridLineStyle = DataGridLineStyle.Solid Then
                
Return 1
            
Else
                
Return 0
            
End If
        
End Get
    
End Property


    
Private Sub EndEdit()
        InEdit 
= False
        Invalidate()
    
End Sub


    
Private Function GetText(ByVal Value As Object) As String
        
If Value Is System.DBNull.Value Then Return NullText

        
If Not Value Is Nothing Then
            
Return Value.ToString
        
Else
            
Return String.Empty
        
End If

    
End Function


    
Private Sub HideComboBox()
        
If Combo.Focused Then
            
Me.DataGridTableStyle.DataGrid.Focus()
        
End If
        Combo.Visible 
= False
    
End Sub


    
Private Sub RollBack()
        Combo.Text 
= OldVal
    
End Sub


    
Private Sub PaintText(ByVal g As Graphics, _
                          
ByVal Bounds As Rectangle, _
                          
ByVal Text As String, _
                          
ByVal AlignToRight As Boolean)

        
Dim BackBrush As Brush = New SolidBrush(Me.DataGridTableStyle.BackColor)
        
Dim ForeBrush As Brush = New SolidBrush(Me.DataGridTableStyle.ForeColor)
        PaintText(g, Bounds, Text, BackBrush, ForeBrush, AlignToRight)
    
End Sub


    
Private Sub PaintText(ByVal g As Graphics, _
                          
ByVal TextBounds As Rectangle, _
                          
ByVal Text As String, _
                          
ByVal BackBrush As Brush, _
                          
ByVal ForeBrush As Brush, _
                          
ByVal AlignToRight As Boolean)

        
Dim Rect As Rectangle = TextBounds
        
Dim RectF As RectangleF = RectF.op_Implicit(Rect) ' Convert to RectangleF
        Dim Format As StringFormat = New StringFormat

        
If AlignToRight Then
            
Format.FormatFlags = StringFormatFlags.DirectionRightToLeft
        
End If

        
Select Case Me.Alignment
            
Case Is = HorizontalAlignment.Left
                
Format.Alignment = StringAlignment.Near
            
Case Is = HorizontalAlignment.Right
                
Format.Alignment = StringAlignment.Far
            
Case Is = HorizontalAlignment.Center
                
Format.Alignment = StringAlignment.Center
        
End Select

        
Format.FormatFlags = Format.FormatFlags Or StringFormatFlags.NoWrap
        g.FillRectangle(Brush:
=BackBrush, Rect:=Rect)

        Rect.Offset(
0, yMargin)
        Rect.Height 
-= yMargin
        g.DrawString(Text, 
Me.DataGridTableStyle.DataGrid.Font, ForeBrush, RectF, Format)
        
Format.Dispose()

    
End Sub


    
Public ReadOnly Property ComboBox() As ComboBox
        
Get
            
Return Combo
        
End Get
    
End Property

End Class

测试代码

Private   Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        InitForm(DataGrid1)
        
Dim namesDataTable As DataTable
        namesDataTable 
= New DataTable("NamesTable")

        namesDataTable.Columns.Add(
"Name", GetType(String))
        namesDataTable.Columns.Add(
"Sex", GetType(String))

        
Dim namesDataSet As DataSet = New DataSet
        namesDataSet.Tables.Add(namesDataTable)
        DataGrid1.DataSource 
= namesDataSet
        DataGrid1.DataMember 
= "NamesTable"

        AddGridStyle(DataGrid1)
        AddData(namesDataTable)

    
End Sub


    
Private   Sub AddGridStyle(ByRef myGrid As DataGrid)
        
Dim myGridStyle As DataGridTableStyle = New DataGridTableStyle
        myGridStyle.MappingName 
= "NamesTable"

        
Dim nameColumnStyle As DataGridTextBoxColumn = New DataGridTextBoxColumn
        nameColumnStyle.MappingName 
= "Name"
        nameColumnStyle.HeaderText 
= "Name"
        myGridStyle.GridColumnStyles.Add(nameColumnStyle)

        
Dim mydt As DataTable
        mydt 
= New DataTable
        mydt.Columns.Add(
"id", GetType(String))
        mydt.Columns.Add(
"text", GetType(String))

        
Dim newRowW As DataRow
        newRowW 
= mydt.NewRow()
        newRowW(
0) = "0"
        newRowW(
1) = "女"
        
Dim newRowM As DataRow
        newRowM 
= mydt.NewRow()
        newRowM(
0) = "1"
        newRowM(
1) = "男"
        mydt.Rows.Add(newRowM)
        mydt.Rows.Add(newRowW)

        
Dim comboxColumnStyle As New DataGridComboBoxColumnStyle(mydt, 1, 1)
        comboxColumnStyle.MappingName 
= "Sex"
        comboxColumnStyle.HeaderText 
= "Sex"
        comboxColumnStyle.Width 
= 100
        myGridStyle.GridColumnStyles.Add(comboxColumnStyle)

        myGrid.TableStyles.Add(myGridStyle)
    
End Sub


    
Private   Sub AddData(ByRef namesDataTable As DataTable)
        
Dim dRow As DataRow = namesDataTable.NewRow()
        dRow(
"Name") = "小站"
        dRow(
"Sex") = "女"
        namesDataTable.Rows.Add(dRow)

        dRow 
= namesDataTable.NewRow()
        dRow(
"Name") = "小李"
        dRow(
"Sex") = "男"
        namesDataTable.Rows.Add(dRow)

        dRow 
= namesDataTable.NewRow()
        dRow(
"Name") = "小吴"
        dRow(
"Sex") = "女"
        namesDataTable.Rows.Add(dRow)

        namesDataTable.AcceptChanges()
    
End Sub


    
Private   Sub InitForm(ByRef myGrid As DataGrid)
        myGrid.TabStop 
= True
        myGrid.TabIndex 
= 1
    
End Sub
海思芯片OpenHarmony系统移植:Sensor传感器模块HDF驱动配置HCS文件详解 海思系列芯片的传感器模块通过HDF(Hardware Driver Foundation)驱动框架进行管理和配置。传感器HCS(HDF Configuration Source)配置文件定义了各类传感器的硬件参数、总线配置、寄存器序列等信息,为传感器驱动提供必要的初始化和运行参数。海思系列芯片适配OpenHarmony的传感器HDF配置HCS文件是传感器驱动开发的关键部分,通过合理配置可以实现各种传感器设备的驱动支持。 阅读详情

相关推荐

Quantum Espresso实战进阶:HSE混合泛函在能带计算中的精准应用

本文深入探讨了在Quantum Espresso中应用HSE混合泛函进行高精度能带计算的实战方法。针对传统DFT方法低估半导体带隙的问题,HSE通过混合精确交换能,显著提升计算精度。文章详细讲解了从输入文件配置、参数设置(如nqx网格、exxdiv_treatment)、到自洽与非自洽计算流程,以及结果可视化与对比的全过程,并提供了关键的调优与避坑指南,助力实现从PBE到HSE的精准进阶。

weixin_28363123的博客 225

VB中关于COMBOBOX组合框的使用方式

ADDITEM表示组合框项目的添加过程 combo1.list(0),表示的是第一个项目,1234,若是希望在text1中显示,ABCD的话,则为combo1.list(3)

qq_18671205的博客 1万+

基于PCIE8311+FPGA+TMS320F28335 PCIE应用项目开发板PROTEL99设计硬件(原理图+PCB)文件

基于PCIE8311+FPGA+TMS320F28335 PCIE X1应用项目开发板PROTEL99设计硬件(原理图+PCB)文件,Protel 99se 设计的项目工程文件,包括原理图及PCB印制板图,可用Protel或 Altium Designer(AD)软件打开或修改,都已经制板在实际项目中使用,可作为你产品设计的参考。

GJZGRB的博客 576

VB 重写checkbox类,实现多选

关于checkbox的多选,效果图如下 在这里插入代码片 Imports System.ComponentModel Imports System.Data Imports System.Linq Imports System.Reflection Imports Newtonsoft.Json.Linq Public Class ComboBoxEx Inherits ComboBox Private lst As New TreeView() Private _text As String '当text

qq_34951755的博客 1256

实战指南:基于汇川PLC与EtherNET/IP的无线以太网通信配置详解

本文提供了一份详细的实战指南,讲解如何配置汇川PLC基于EtherNET/IP协议的无线以太网通信。通过硬件选型(如达泰DTD419MB模块)、软件设置(使用AutoShop配置IP与I/O映射)及通信测试,实现PLC间稳定、灵活的数据交换,有效解决工业现场布线难题,提升部署与维护效率。

lake5的博客 613

阻抗控制器实现机器人关节运动控制

本文先对做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章如:PID反馈控制器、前馈控制器、前馈+反馈控制器等等如:机械臂模型(几何解算)控制器、小车底盘运动学模型(几何解算)的控制器、四足机器人模型(预测迭代)的控制器等等如:微分平坦(无人机的轨迹跟随)等等如:MPC优化控制算法如:线性二次调节器(LQR)是基于模型的控制器,使用车辆状态来使误差最小化,Apollo使用LQR进行横向控制。横向控制包含四个组件:横向误差、横向误差的变化率、朝向误差和朝向的变化率。

qq_35635374的博客 364

VB.NET控件之ComboBox

Combobox(组合框)控件相当于将文本框和列表框的功能结合在一起。这个控件可以实现输入文本来选定项目,也可以实现从列表中选定项目这两种选择项目的方法。如果项目数超过了组合框能够显示的项目数,控件上将自动出现滚动条。用户可以上下或左右滚动列表。ComboBox控件在工具箱中的图标如图所示:1.使用组合框和列表框通常,组合框适用于建议性的选项列表,而当希望将输入限制在列表之内时,应使用列表框。

小尘 1万+

电机驱动器MP6540H应用设计

/ ... 其他初始化函数(SystemClock_Config, MX_GPIO_Init, MX_TIM1_Init, MX_TIM2_Init)需要你根据STM32CubeMX生成或手动编写。// 假设霍尔传感器引脚是 GPIO_PIN_8, GPIO_PIN_9, GPIO_PIN_10。// 低侧U相GPIO引脚。

zhusl6688的博客 656

训练数据示例

针对“规格书生成测试用例脚本”的任务,在 LLaMA-Factory 中使用即可。关键是把“规格书内容”放进input字段,把“期望的脚本输出”放进output字段。

liuxs2009的专栏 57

中科大大数据学院2023年保研夏令营机试题目【无offer,直接放题了~】(2023.07.22下午14:35-17:35考试)

给定一串数字,最后一个数是0表示结尾,表示数字串的终止,为无效数字。将该数字串存储在双向链表中,判断是否为回文串,若是,则输出Yes,否则输出No.

m0_51339444的博客 1921

HBase骚操作之数据加载方式BulkLoad

本文研究了一种HBase BulkLoad的入库方式,该方式利用HBase的数据信息按照特定格式存储在hdfs内这一原理,直接在HDFS中生成持久化的HFile数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。该方式配合MapReduce完成,高效便捷,而且不占用Region资源,增添负载,在大数据量写入时能极大的提高写入效率,并降低对Hbase节点的写入压力。HBase BulkLoad对于异构数据源的合并及大量数据一次性导入具有重要指导意义,相比HBase Put操作在性能上具有较高的优势

石榴姐yyds 7789

从瀑布到流水线:DevOps 入门与 GitLab + Jenkins + Docker 落地实践

先看清软件开发生命周期(SDLC)的全貌,再对比瀑布模型与敏捷开发,随后进入持续集成与 CI/CD 的机制内核;最后落到实操——在 GitLab、Jenkins、Docker 组成的四机实验环境里,走完源码托管、自动化构建、镜像封装与远程部署,直到参数化构建与版本回滚。概念与命令并重,既是入门地图,也是操作手册。

年轻的时候很穷,经过我多年的努力,终于不再年轻。 230

MIPI D-PHY的校准测试

MIPI的校准测试困扰了很久,今天终于得以解决!

一只豌豆象的博客 3918

【LTE L3 笔记 09】LTE物理信道-PRACH

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 186

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

DNS 不是把域名翻译成 IP:递归解析、TTL 缓存、CNAME 与报文排错实战

本文通过离线Python实验,拆解DNS递归解析、缓存机制与报文结构,揭示“DNS不是全局映射表”的本质。重点解析递归器角色、TTL衰减、CNAME链处理、负缓存隔离及修改记录延迟生效等核心问题,结合实战排错案例,阐明缓存层级、事务匹配、截断处理与安全边界,强调从应用到权威的逐层排查逻辑,实现可复现、可验证的DNS教学系统。

此人很懒,什么都没有写~~ 341

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 113

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

密码存储不是 MD5 加盐:PBKDF2、scrypt、参数升级与安全验证实战

本文通过实战演示密码存储的正确做法:摒弃MD5加盐,采用PBKDF2与scrypt等高成本密钥派生函数,结合随机盐、版本化记录与严格解析,确保离线破解成本可控。模块实现安全验证、参数校验、透明升级与统一错误处理,强调算法选择需兼顾安全性与可维护性,提供教学级密码存储方案,助力构建可迁移、可审计的认证边界。

此人很懒,什么都没有写~~ 219

软件测试用例模板怎么写:从用例设计到执行记录的全套指南

测试用例是测试工作的核心产出,它决定测试覆盖了多少、漏掉了什么。但大多数人的测试用例写得像流水账——只有正常路径,没有异常场景;只有操作步骤,没有预期结果;只有功能测试,没有非功能测试。本文拆解测试用例的标准结构,说明每个字段的含义和写法,给出覆盖功能测试、性能测试、安全测试的完整用例范例,并列出测试用例设计的五个高频遗漏点。

wuwangzhiduoshao的博客 134

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试

本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。

信息安全领域优质创作者|操作系统领域专家 161
上一篇: 读取Excel表格中的数据
下一篇: 在DataGrid中添加图片列(VB.NET)
sqlmlm
博客等级 码龄19年 12粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值