當我在我的項目中最大化一個表格並從中打開另一個表格時(使用按鈕),我收到了一個不尋常的故障,我只能使用下面的屏幕截圖來解釋。打開表格時出現不尋常的小故障
在這張圖片中,我有一個訂單屏幕和一個貨運屏幕。當我點擊'添加運費'按鈕時,訂單屏幕被最大化爲MDI屏幕,然後在打開貨運管理屏幕時,它將這兩個表單設置爲WindowState.Normal
,我正在以編程方式進行操作,並且我明白爲什麼它將這兩個表單設置爲正常的窗口狀態,但是,您可以在最大化視圖中留下順序屏幕的跟蹤。
要解釋清楚,形式已經從WindowState.Maximized
變更爲WindowState.Normal
,圖像在左上角的形式是好的,但訂單在兩個標準化仍呈現和最大化,而是最大化的窗口不存在,當您移動其他屏幕時,它會消失。
最奇怪的是,我正在使用相同的代碼,以完全相同的方式在程序的其他地方打開其他窗口,但這種故障沒有發生。
只有2個「父」形式在打開其他表單時執行此操作。
還有其他人有過這個問題嗎?什麼是解決方法?即使我以最大化模式打開另一個表單也會發生這種情況,所以它不像在最大化視圖中打開它那麼簡單。
打開在示例形式的代碼如下:
ugProducts.UpdateData()
Try
Dim dt As New DataTable
dt = ugProducts.DataSource
Dim ordnum As Integer
Dim osql As New OleDbCommand
osql.CommandType = CommandType.Text
osql.Connection = con
osql.CommandText = "SELECT [Order_Number] FROM [Order_Freight] WHERE [Order_Reference] = ?"
osql.Parameters.AddWithValue("@onum", lblReference.Text.ToString)
ordnum = Convert.ToInt32(osql.ExecuteScalar)
Dim ORef As String
ORef = lblReference.Text
Dim FNumber As Integer
Dim fsql As New OleDbCommand
fsql.CommandType = CommandType.Text
fsql.Connection = con
fsql.CommandText = "SELECT [Freight_Number] FROM [Order_Freight] WHERE [Order_Reference] = ?"
fsql.Parameters.AddWithValue("@fnum", lblReference.Text.ToString)
FNumber = Convert.ToInt32(fsql.ExecuteScalar)
Dim PC As String
Try
PC = ugProducts.ActiveRow.Cells("Product_Code").Text.ToString
Catch
PC = ugProducts.Rows(0).Cells("Product_Code").Text.ToString
End Try
Dim SC As String
Try
SC = ugProducts.ActiveRow.Cells("Supplier_Code").Text.ToString
Catch
SC = ugProducts.Rows(0).Cells("Supplier_Code").Text.ToString
End Try
Dim f As New frmEditFreight(con, dt, Me, cmbCustCode.Text, ordnum, ORef, FNumber, PC, SC)
f.MdiParent = Me.MdiParent
f.Show()
Catch ex As Exception
errorLog(ex)
End Try
然後,加載的形式,我有這個
Me.Location = New Point(0, 0)
Me.WindowState = FormWindowState.Normal
txtTotal.ReadOnly = True
lftable = New DataTable
If isNewOrder = False Then
Try
For Each dc As DataColumn In lineTable.Columns
If dc.ColumnName = "Order_Number" OrElse dc.ColumnName = "Product_Code" OrElse dc.ColumnName = "Supplier_Code" Then
lftable.Columns.Add(New DataColumn(dc.ColumnName, dc.DataType))
End If
Next
Dim product As String = ""
Dim supplier As String = fOrder.cmbSupplier.Text
Dim ds As New DataSet
Dim da As New OleDbDataAdapter("SELECT * FROM [Order_Freight] WHERE [Order_Number] = ?", con)
da.SelectCommand.Parameters.Add("@num", OleDbType.Integer).Value = orderNum
da.Fill(ds)
Dim nDt As New DataTable
nDt = ds.Tables(0).Copy()
For Each row As DataRow In nDt.Rows
product = row.Item("Product_Code")
For Each dr As DataRow In lineTable.Rows
If dr.RowState <> DataRowState.Deleted Then
If dr.Item("Product_Code") = product Then
dr.Delete()
Else
End If
Else
If dr.Item("Product_Code", DataRowVersion.Original) = product Then
dr.Delete()
Else
End If
End If
Next
Next
For Each dr As DataRow In lineTable.Rows
If dr.RowState <> DataRowState.Deleted Then
dr.Item("Order_Number") = orderNum
End If
Next
Me.ugProducts.DataSource = lineTable
For Each dc As UltraGridColumn In ugProducts.DisplayLayout.Bands(0).Columns
Dim cName As String = dc.ToString
Select Case cName
Case "Product_Code"
dc.Hidden = False
Case "Order_Number"
dc.Hidden = False
Case "Supplier_Code"
dc.Hidden = False
Case Else
dc.Hidden = True
End Select
Next
loadAddresses(custCode, con)
dtEstDelivery.Value = Date.Today
ugProducts.DisplayLayout.Bands(0).Override.CellClickAction = CellClickAction.RowSelect
selectedTable.Columns.Add("Product_Code")
selectedTable.Columns.Add("Supplier_Code")
selectedTable.Columns.Add("RowIndex")
freightTable = New DataTable
With freightTable.Columns
.Add("Freight_Number")
.Add("Address_Code")
.Add("Est_Delivery")
.Add("Product_Code")
.Add("Freight_Desc")
.Add("Freight_Val", GetType(Decimal))
.Add("Supplier_Code")
.Add("freeDelivery", GetType(Boolean))
End With
ugFreight.DataSource = freightTable
ugSelected.DataSource = selectedTable
ugSelected.DisplayLayout.Bands(0).Override.CellClickAction = CellClickAction.RowSelect
Catch ex As Exception
errorLog(ex)
End Try
Else
Try
Me.ugProducts.DataSource = lineTable
For Each dc As UltraGridColumn In ugProducts.DisplayLayout.Bands(0).Columns
Dim cName As String = dc.ToString
Select Case cName
Case "Product_Code"
dc.Hidden = False
Case "Product_Description"
dc.Hidden = False
dc.Header.Caption = "Description"
Case "Supplier_Code"
dc.Hidden = False
dc.Header.Caption = "Supplier"
Case Else
dc.Hidden = True
End Select
Next
loadAddresses(custCode, con)
dtEstDelivery.Value = Date.Today
ugProducts.DisplayLayout.Bands(0).Override.CellClickAction = CellClickAction.RowSelect
selectedTable.Columns.Add("Product_Code")
selectedTable.Columns.Add("Supplier_Code")
selectedTable.Columns.Add("RowIndex")
freightTable = New DataTable
With freightTable.Columns
.Add("Freight_Number")
.Add("Address_Code")
.Add("Est_Delivery")
.Add("Product_Code")
.Add("Freight_Desc")
.Add("Freight_Val", GetType(Decimal))
.Add("Supplier_Code")
.Add("freeDelivery", GetType(Boolean))
End With
ugFreight.DataSource = freightTable
ugSelected.DataSource = selectedTable
ugSelected.DisplayLayout.Bands(0).Override.CellClickAction = CellClickAction.RowSelect
Catch ex As Exception
errorLog(ex)
End Try
End If
bLoading = False
其次一些普通的東西,設置DataTables
,加載數據等。
其遇到的問題的另一種形式具有這樣的代碼:
Try
Dim grid As UltraGrid = DirectCast(sender, UltraGrid)
Dim lastElement As UIElement = ugRates.DisplayLayout.UIElement.LastElementEntered
Dim rowElement As RowUIElement
If TypeOf lastElement Is RowUIElement Then
rowElement = DirectCast(lastElement, RowUIElement)
Else
rowElement = DirectCast(lastElement.GetAncestor(GetType(RowUIElement)), RowUIElement)
End If
If rowElement Is Nothing Then Return
Dim row As UltraGridRow = DirectCast(rowElement.GetContext(GetType(UltraGridRow)), UltraGridRow)
If (row Is Nothing) Then Return
Dim MousePosition As Point = grid.PointToClient(Control.MousePosition)
If Not lastElement.AdjustableElementFromPoint(MousePosition) Is Nothing Then Return
Select Case row.Cells("cType").Value
Case "Acquisition Rate"
Dim supplier As String
If rbtnAllSuppliers.Checked = True Then
supplier = row.Cells("Supp_Code").Value
Else
supplier = cmbSupplier.Text
End If
Dim f As New frmCommission(con, row.Cells("Comm_Code").Value, supplier, True)
f.MdiParent = Me.MdiParent
f.Show()
與下面的選擇殼體的其餘部分。在這種情況下被打開的形式,然後有代碼
Me.Location = New Point(0, 0)
Me.WindowState = FormWindowState.Normal
Me.Cursor = Cursors.Default
isUpdate = False
Me.ugComm.ContextMenuStrip = cmCommRate
With updateDT.Columns
.Add("Apply", GetType(Boolean)).DefaultValue = False
.Add("Product_Code")
.Add("Commission_Rate")
.Add("Multiplier")
End With
btnCustomerSearch.Enabled = False
Try
Dim da As New OleDb.OleDbDataAdapter
Dim ds As New DataSet
sql = "SELECT * FROM [System Settings]"
da = New OleDb.OleDbDataAdapter(sql, con)
Dim dt As New DataTable
da.Fill(dt)
If dt.Rows(0).Item("enableAqDate") = False Then
rbtnAcq.Enabled = False
End If
If cCode <> "" And sCode <> "" Then
cmbSupp.Text = sCode
cmbSupp_ValueChanged(sender, New EventArgs)
End If
disableControls()
cmbSupp.Refresh()
txtCommCode.Refresh()
ugComm.Refresh()
cmbSupp.Enabled = False
isLoad = False
If isEnquiry = True Then
txtCommCode.Text = cCode
loadEnquiry()
ugComm.Enabled = True
cmdAddRange.Enabled = False
cmdUpdateRange.Enabled = True
cmbSupp.Value = sCode
txtCommCode.Text = cCode
End If
Catch ex As Exception
errorLog(ex)
End Try
當試圖插入建議作出dpiaware = True
的代碼,我已經無法看到代碼的任何地方,這將去?
你可以發佈你遇到問題的代碼嗎?雖然很奇怪,但我不得不爲這種情況添加Application.DoEvents(),因爲一種形式可能需要更多的內存,並且需要更多的時間來加載。 –
你必須向我們展示創建這些表單的代碼。任何塗料代碼?任何調整大小的代碼? – LarsTech
@JimmySmith代碼添加。 – David