从另一个表单和类调用公共子 [英] Calling a Public Sub from Another Form and Class
本文介绍了从另一个表单和类调用公共子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
大家好!
我有一个DataGridView在表单1(TasksList)
和表单2上的注册类型有保存按钮应该更新网格。
当我点击保存按钮时,它会保存新记录,但我无法刷新它。
我现在唯一可以做的就是从表格1更新。
表格1
公共 类任务列表
公共 Sub refresh_data()
dgv_all.SuspendLayout()
bs_tasklist.SuspendBinding( )
' 更好地使用OrderBY
bs_tasklist.DataSource = To_DoList.GetInstance.Tasks .OrderBy( Function (x)x.Status)。ToList()
dgv_all.DataSource = Nothing
dgv_all.DataSource = bs_tasklist
bs_tasklist.ResumeBinding()
dgv_all.ResumeLayout()
' 排序失败:(,需要更多研究
' dgv_all.Sort(Status,System.ComponentModel.ListSortDirection.Ascending)
Dim 任务 As TaskItem
Dim 不完整 As 列表( TaskItem)= 新列表( TaskItem)
Dim 逾期作为列表( Of TaskItem)= 新列表( of Ta skItem)
Dim DateNow 作为 日期 = 日期。现在
对于 i 正如 整数 = 0 要 dgv_all.Rows.Count - 1
任务= CType (dgv_all.Rows(i) .DataBoundItem,TaskItem)
如果 Tasks.Priority = TaskPriority.High 那么
dgv_all.Rows(i).DefaultCellStyle.ForeColor = Color.Red
ElseIf Tasks.Priority = TaskPriority.Low 然后
dgv_all.Rows(i).DefaultCellStyle.ForeColor = Color.Green
结束 如果
如果 Tasks.Status = TaskStatus。完成然后
dgv_all.Rows(i).DefaultCellStyle.Font = 新字体( Me .Font,FontStyle.Strikeout)
Else
Incomplete.Add(Tasks)
结束 如果
如果 Tasks.DateDue< DateNow。日期 然后
Overdue.Add(任务)
结束 如果
下一步
dgv_incomplete .SuspendLayout()
dgv_incomplete.DataSource = Nothing
dgv_incomplete.DataSource = Incomplete
dgv_incomplete.ResumeLayout()
dgv_overdue.SuspendLayout()
dgv_overdue.DataSource = Nothing
dgv_overdue.DataSource =逾期
dgv_overdue.ResumeLayout()
My.Forms.ParentForm.Stats()
结束 Sub
表单2,带保存按钮
< span class =code-keyword>私有 Sub btn_taskSave_Click(发件人作为 对象,e 作为 EventArgs)句柄 btn_taskSave.Click
Dim DateNow 作为 日期 = 日期。现在
如果 tb_name.Text = 字符串 .Empty 或 tb_name.Text = 类型名称此处 然后
MsgBox( 请输入有效名称)
否则
如果 chb_completed.Checked = True 该n
Task.Status = TaskStatus.Complete
Else
Task.Status = TaskStatus.Incomplete
结束 如果
Task.Name = tb_name.Text
Task.DateDue = dtp_datedue .Value
Task.Description = rtb_description.Text
如果 rb_high.Checked = True 然后
Task.Priority = TaskPriority.High
ElseIf rb_normal.Checked = True 然后
Task.Priority = TaskPriority.Normal
ElseIf rb_low.Checked = True 然后
Tas k.Priority = TaskPriority.Low
结束 如果
If NewTask = True 然后
Task.DateCreated = DateNow。日期
结束 如果
' woaah它是重复的,if语句可以保存世界
如果 NewTask = False 那么
To_DoList。 GetInstance.Tasks.Remove( Me .Task)
结束 如果
To_DoList.GetInstance.Tasks.Add( Me .Task)
我 .Close()
结束 如果
结束 Sub
解决方案
http://stackoverflow.com/questions/17949891/calling-public-sub-works-in-some-places-but-not-others-vb- net-2010 [ ^ ]
Hello guys!
I have a DataGridView On form 1 (TasksList)
and kind of Registration on form 2 that have "Save" Button which should update the Grid.
When I am clicking on the save button, it is saves the new record but I Can't refresh it.
The only way I can do it now is updating from the form 1.
Form 1
Public Class TasksList
Public Sub refresh_data()
dgv_all.SuspendLayout()
bs_tasklist.SuspendBinding()
'Better Using OrderBY
bs_tasklist.DataSource = To_DoList.GetInstance.Tasks.OrderBy(Function(x) x.Status).ToList()
dgv_all.DataSource = Nothing
dgv_all.DataSource = bs_tasklist
bs_tasklist.ResumeBinding()
dgv_all.ResumeLayout()
'Sorting Failed :(, Need more research
'dgv_all.Sort(Status, System.ComponentModel.ListSortDirection.Ascending)
Dim Tasks As TaskItem
Dim Incomplete As List(Of TaskItem) = New List(Of TaskItem)
Dim Overdue As List(Of TaskItem) = New List(Of TaskItem)
Dim DateNow As Date = Date.Now
For i As Integer = 0 To dgv_all.Rows.Count - 1
Tasks = CType(dgv_all.Rows(i).DataBoundItem, TaskItem)
If Tasks.Priority = TaskPriority.High Then
dgv_all.Rows(i).DefaultCellStyle.ForeColor = Color.Red
ElseIf Tasks.Priority = TaskPriority.Low Then
dgv_all.Rows(i).DefaultCellStyle.ForeColor = Color.Green
End If
If Tasks.Status = TaskStatus.Complete Then
dgv_all.Rows(i).DefaultCellStyle.Font = New Font(Me.Font, FontStyle.Strikeout)
Else
Incomplete.Add(Tasks)
End If
If Tasks.DateDue < DateNow.Date Then
Overdue.Add(Tasks)
End If
Next
dgv_incomplete.SuspendLayout()
dgv_incomplete.DataSource = Nothing
dgv_incomplete.DataSource = Incomplete
dgv_incomplete.ResumeLayout()
dgv_overdue.SuspendLayout()
dgv_overdue.DataSource = Nothing
dgv_overdue.DataSource = Overdue
dgv_overdue.ResumeLayout()
My.Forms.ParentForm.Stats()
End Sub
form 2 with the save button
Private Sub btn_taskSave_Click(sender As Object, e As EventArgs) Handles btn_taskSave.Click
Dim DateNow As Date = Date.Now
If tb_name.Text = String.Empty Or tb_name.Text = "Type Name Here" Then
MsgBox("Please enter valid name")
Else
If chb_completed.Checked = True Then
Task.Status = TaskStatus.Complete
Else
Task.Status = TaskStatus.Incomplete
End If
Task.Name = tb_name.Text
Task.DateDue = dtp_datedue.Value
Task.Description = rtb_description.Text
If rb_high.Checked = True Then
Task.Priority = TaskPriority.High
ElseIf rb_normal.Checked = True Then
Task.Priority = TaskPriority.Normal
ElseIf rb_low.Checked = True Then
Task.Priority = TaskPriority.Low
End If
If NewTask = True Then
Task.DateCreated = DateNow.Date
End If
'woaah it's duplicating, if statement saves the world
If NewTask = False Then
To_DoList.GetInstance.Tasks.Remove(Me.Task)
End If
To_DoList.GetInstance.Tasks.Add(Me.Task)
Me.Close()
End If
End Sub
解决方案
http://stackoverflow.com/questions/17949891/calling-public-sub-works-in-some-places-but-not-others-vb-net-2010[^]
这篇关于从另一个表单和类调用公共子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文