【问题标题】:Rewriting the Settings in Windows Forms重写 Windows 窗体中的设置
【发布时间】:2012-01-27 16:39:05
【问题描述】:

我在application settings 中设置了我的Form text 的名称,我需要rewrite 它。有没有可能,因为它告诉我它只是一个readonly

我知道我们可以使用 me.text="" 简单地更改它 但是我的应用程序中有一个问题,因为我有以下代码,每次加载表单时都会擦除文本。

Protected Overrides Sub OnLayout(ByVal e As System.Windows.Forms.LayoutEventArgs)

        MyBase.OnLayout(e)
        'Me.Text = CStr(Val(Me.Text) + 1)
        FillList()

        MyBase.OnLayout(e)
        If FontColor.Items.Count = 0 Then
            FontColor.Items.AddRange(Known_Color)
            FontColor.MaxDropDownItems = 20
        End If


        MyBase.OnLayout(e)
        If OutlineColor.Items.Count = 0 Then
            OutlineColor.Items.AddRange(Known_Color)
            OutlineColor.MaxDropDownItems = 20
        End If



        MyBase.OnLayout(e)
        If BorderColor.Items.Count = 0 Then
            BorderColor.Items.AddRange(Known_Color)
            BorderColor.MaxDropDownItems = 20
        End If


        MyBase.OnLayout(e)
        If BackgroundColor.Items.Count = 0 Then
            BackgroundColor.Items.AddRange(Known_Color)
            BackgroundColor.MaxDropDownItems = 20
        End If
    End Sub

是否有任何解决方法可以做到这一点?

【问题讨论】:

  • 你为什么要调用 MyBase.OnLayout(e) 5 次?
  • 我正在尝试使用配色方案和字体来绘制组合框,例如边框颜色、字体颜色、背景颜色。

标签: vb.net winforms settings


【解决方案1】:
MyBase.OnLayout(e)

这很可能是你的错误所在。

您正在设置文本,然后调用基类OnLayout 事件,这可能导致文本恢复为默认值。如果您想更改某些内容,请在调用案例类事件处理程序后进行。

如果您只是想更改表单的文本,为什么不直接使用Form_Load 事件处理程序而不调用基本事件处理程序。

【讨论】:

    【解决方案2】:

    回答您关于应用程序设置中的表单文本为只读的问题。看看这个MSDN Page

    来自上面的链接:

    根据范围,有两种类型的应用程序设置:

    • 应用程序范围的设置可用于 Web 服务的 URL 或数据库连接字符串等信息。这些值 与应用程序相关联。因此,用户无法更改 它们在运行时。
    • 用户范围的设置可用于保留表单的最后位置或字体首选项等信息。用户可以更改
      这些值在运行时。

    您可以使用 Scope 属性更改设置的类型。

    简而言之,如果您的应用程序设置是应用程序范围的,您不能在运行时更改它,您必须使用用户范围设置或滚动您自己的存储。

    编辑:添加到@Bojan 的答案。 OnLayout 事件将在 InitializeComponent() 方法期间以及每次调整窗体大小或更改控件大小时触发。我会亲自将您的初始化移至Form_Load eventNew()

    Public Sub New()
    
        ' This call is required by the designer.
        InitializeComponent()
    
        ' Add any initialization after the InitializeComponent() call.
        Me.Text = "Hello World"
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 2013-11-13
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 2014-01-01
      相关资源
      最近更新 更多