【发布时间】:2014-09-24 15:54:36
【问题描述】:
我在 vb.net 中有一个 MVC winform 应用程序,
有一个 BaseController 引用了一个 Model,并且 2 个具体控制器继承自这个 BaseController。
在InitializeComponent() 之前实例化一个控制器,然后调用InitializeComponent,然后,一些类似这样的绑定:
chkGeolocalizacion.DataBindings.Add("Checked", controller.Model, "SolicitarGeolocalizacion", False, DataSourceUpdateMode.OnPropertyChanged)
chkGeolocalizacion 位于组框或面板内(都尝试过)。
然后表单等待用户输入在 2 个单选按钮之间进行选择,并触发一个事件,该事件将控制器替换为用户选择的控制器。之后,我想让绑定了控件并引发 Argumentoutofrangeexception 的组框可见,例如“值 0 不在最小值和最大值之间”。
如果我从不修改可见属性,代码将完美运行。
Dim modelo As Model_Reporte = controller.Model
If rbtScoringDistancia.Checked Then
controller = New Reporte_controller_SinK()
chkGeolocalizacion.Visible = True
Else
controller = New Reporte_Controller(Me)
chkGeolocalizacion.Visible = False
End If
controller.Model = modelo
pnlConfig.Visible = True
这是 .net 错误还是什么?我无法使其工作,唯一的解决方法是使控件可见/不可见,而不是包含它们的组框或面板
(我尝试了面板和分组框,抛出相同的异常)
谢谢!
ps:如果您需要查看我的更多代码,请索取。
编辑:添加额外代码
Public Class Reporte
Private controller As Reporte_ControllerBase
Public Sub New()
controller = New Reporte_Controller(Me)
InitializeComponent()
addDataBindings()
End Sub
Private Sub addDataBindings()
dt_fecha_desde.DataBindings.Add("Value", controller.Model, "GetFechaDesde", False, DataSourceUpdateMode.OnPropertyChanged)
dt_fecha_hasta.DataBindings.Add("Value", controller.Model, "GetFechaHasta", False, DataSourceUpdateMode.OnPropertyChanged)
KM_Scoring.DataBindings.Add("Value", controller.Model, "KM_Scoring", False, DataSourceUpdateMode.OnPropertyChanged)
chkGeolocalizacion.DataBindings.Add("Checked", controller.Model, "SolicitarGeolocalizacion", False, DataSourceUpdateMode.OnPropertyChanged)
End Sub
Private Sub rbtScoringDistancia_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles rbtScoringDistancia.CheckedChanged, rbtScoringAlternativo.CheckedChanged
Dim modelo As Model_Reporte = controller.Model
If rbtScoringDistancia.Checked Then
lblKm.Text = "Iteraciones"
LblScoring.Text = "Considerar infracción a las "
controller = New Reporte_controller_SinK()
chkGeolocalizacion.Visible = True
Else
LblScoring.Text = "Evaluar scoring cada "
lblKm.Text = "Kilómetros"
controller = New Reporte_Controller(Me)
chkGeolocalizacion.Visible = False
End If
controller.Model = modelo
pnlConfig.Visible = True 'Exception thrown here
End Sub
End Class
Public Class Reporte_Controller
Inherits Reporte_ControllerBase
'extra code...
End Class
Public MustInherit class Reporte_ControllerBase
Protected modelo As Model_Reporte = New Model_Reporte
Public Property Model() As Model_Reporte
Get
Return modelo
End Get
Set(ByVal value As Model_Reporte)
modelo = value
End Set
End Property
End Class
Public Class Model_Reporte
Private _getFechaDesde As Date = Date.Today.AddMonths(-1)
Private _getfechaHasta As Date = Date.Today
Private _kmScoring As Integer
Private _solicitarGeolocalizacion As Boolean
Private _limiteRegular As Int32 = 7
Private _limiteMal As Int32 = 25
'getters and setters for each property
End Class
澄清:如果我之前将面板设置为 false,则除了使面板可见属性为 true 之外,一切正常。如果它是真的并且我不修改它,它可以工作。
edit2:只有在面板或组框上设置可见 = true 时才会引发异常,这些面板或组框具有绑定到控制器模型的多个控件。在另一个包含未绑定控件的 groupbox 上设置 visible = true 或 false 可以完美地工作。
【问题讨论】:
-
究竟在哪一行崩溃了?抛出异常,这将有助于我们调试它。
-
pnlConfig.Visible = True 异常文本是“El valor de '0' no es válido para 'Value'. 'Value' debería estar entre 'Minimum' y 'Maximum'. Nombre del parametro:值”转换为“值 0 对“值”无效。“值”应介于“最大值”和“最小值”之间,这对属性 Visible 没有意义
-
介意把剩下的代码扔进去吗?因为到目前为止,您所展示的内容是完美无缺的。
-
您是否尝试将命令绑定到按钮?只是看看它是否单独工作?一些事情:
if pnlConfig.visible = true then pnlConfig.visible = false else pnlConfig.visible = true end(由button.click触发。如果这个错误,那么我一无所知。 -
有问题...对不起,我不能再帮你了,表单中的某些东西导致了这个错误,我无法在我的计算机上重新创建它(它可以在我的计算机上运行)。确保没有任何东西包裹面板,这也可能导致此错误(?)。祝你好运! (+1 可见性)
标签: vb.net winforms data-binding