【问题标题】:Convert String to Color in Visual Basic在 Visual Basic 中将字符串转换为颜色
【发布时间】:2016-01-08 18:30:06
【问题描述】:

这是我的想法: 在退出表单时,它将背景色保存到位于名为 settings.txt 的临时文件中。 下次打开表单时,它将检查文件是否存在,如果存在,它将采用其中写入的内容(背景颜色)并将其更改为当前表单背景颜色。 我在将 settings.txt 中写入的文本导入背景色时遇到问题。

    Dim fileReader As String
    fileReader = My.Computer.FileSystem.ReadAllText(TempDirectory + "/Settings.txt")
    System.Drawing.Color.FromName = fileReader.ToString

我在下面有一条蓝线:

System.Drawing.Color.FromName

当我将鼠标移到它上面时,它会显示

没有为“Public Shared Function FromName(name As String) As System.Drawing.Color.”的参数“name”指定参数。

顺便在settings.txt里写了

颜色 [石灰]

大家有什么建议吗?

Visual Basic 2008 速成版

【问题讨论】:

  • 您是否在解析并使用“Color [Lime]”中的“Lime”?
  • 考虑使用项目设置而不是文本文件。 msdn.microsoft.com/query/…
  • @JerryM 我的老师要我处理文件

标签: vb.net


【解决方案1】:

System.Drawing.Color 不是您要为其赋值的那种东西。无论您要在哪里设置颜色,我认为您都想要更像

SomeObject.Color = System.Drawing.Color.FromName("Lime")

因此,要从该变量中读取它,您可能需要以下内容:

SomeObject.color = System.Drawing.Color.FromName(fileReader.Replace("Color[").Replace("]"))

那些.Replace 函数是为了去掉文件中无关的字符。

【讨论】:

    【解决方案2】:

    将字符串转换为颜色

    要将字符串转换为Color,您可以使用以下任一选项:

    他们都在System.Drawing.dll。确保您有对System.Drawing dll 的引用。

    它们都在System.Drawing 命名空间中。别忘了Imports System.Drawing

    ColorConverter 解析名称和 RGB 表示:

    Dim color1 = color.FromName("Red")
    Dim color2 = DirectCast(New ColorConverter().ConvertFromString("Red"), Color)
    Dim color3 = DirectCast(New ColorConverter().ConvertFromString("255,0,0"), Color)
    

    代码中的问题

    您的代码中的问题是您没有将名称传递给FromName 方法。如果你想修复你的代码,你会发现Steve Barron 的答案很有用。

    其他可能对您有所帮助的选项

    如果你想存储一些颜色作为设置,最好使用My Project下的Settings.settings文件并添加一些设置,通过指定NameSystem.Drawing.Color作为TypeUser作为@ 987654342@ 并为Value 选择一种颜色。然后您可以使用My.Settings 简单地使用(读取、分配、保存、重置)这些设置。

    它还支持Andrew Morton 提到的property binding,您会发现他的回答很有用。这样您就可以在设计时选择您的控件,然后在属性网格中,在(ApplicationSettings) 下单击... 对应(PropertyBinding),然后从对话框中将您需要的属性绑定到设置。

    【讨论】:

      【解决方案3】:

      您可以在应用程序设置中使用属性绑定,而不是编写代码来执行此操作。

      1. 在设计器视图中选择表单(即不是它的任何子控件)。
      2. 调出“属性”窗口(例如,按 F4)。
      3. 点击“属性”标签(如果您位于“事件”标签中)。
      4. 展开“(ApplicationSettings)”部分并点击“(PropertyBinding)”。
      5. 单击第二列中的省略号按钮(您可能必须将鼠标悬停在右侧才能看到该按钮)。
      6. 在出现的对话框中,找到“BackColor”并在其右侧显示“(none)”的列中单击。
      7. 从下拉列表中选择“新建...”。
      8. 为设置输入一个合理的名称,并根据需要选择“默认值”。
      9. 好的。

      现在,当您运行程序时,它会自动将表单的 BackColor 设置为上次运行时的值。

      【讨论】:

      • @RezaAghaei 我正在写那个答案,不知道 MSDN 文章,而你正在添加你的评论 - 我随后赞成:)
      • 这是个好方法,但我的老师希望我处理文件
      【解决方案4】:

      如果你在setting.txt中只写一种颜色,那你就只有一个错误

       Dim fileReader As String
          fileReader = My.Computer.FileSystem.ReadAllText(TempDirectory +  "/Settings.txt")
          System.Drawing.Color.FromName(fileReader)
      

      在 settings.txt 中应该只写“Lime”而不是“Color[Lime]”(不带引号)

      【讨论】:

        【解决方案5】:

        现在它可以工作了,这就是我所做的:

        一开始:

        Dim TempDirectory As String = My.Computer.FileSystem.SpecialDirectories.Temp
        

        关闭时:

                If My.Computer.FileSystem.FileExists(TempDirectory + "/Settings.txt") Then
                My.Computer.FileSystem.DeleteFile(TempDirectory + "/Settings.txt")
        
            End If
        
            Dim colorConv As New ColorConverter
            Dim BackColorString As String
            BackColorString = colorConv.ConvertToString(BackColor)
            Dim file As System.IO.StreamWriter
            file = My.Computer.FileSystem.OpenTextFileWriter(TempDirectory + "/Settings.txt", True)
            file.WriteLine(BackColorString)
            file.Close()
        

        打开时:

                If My.Computer.FileSystem.FileExists(TempDirectory + "/Settings.txt") Then
                Dim fileReader As String
                fileReader = My.Computer.FileSystem.ReadAllText(TempDirectory + "/Settings.txt")
                Dim colorConv As New ColorConverter
                BackColor = colorConv.ConvertFromString(fileReader)
            End If
        

        【讨论】:

        • 如果您保存的颜色不是指定颜色之一,它将以颜色 [A=99, R=99, G=19, B=255] 格式写入。如果有帮助的话,我已经在convert-a-string-to-a-system-color-in-net 发布了一种解析方法。
        【解决方案6】:
        Color myColor = new Color();
        
        myColor = Color.AliceBlue;
        
        string myColorSerialized = System.Drawing.ColorTranslator.ToHtml(myColor);
        
        MessageBox.Show("Color serialized is: " + myColorSerialized);
        
        Color deserializedColor = System.Drawing.ColorTranslator.FromHtml(myColorSerialized);
        
        MessageBox.Show("Deserialized color is" + deserializedColor.ToString());
        

        在vb.net中使用以下两种方法转换和保存颜色名称没有任何问题

        System.Drawing.ColorTranslator.ToHtml
        
        System.Drawing.ColorTranslator.FromHtml
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-04
          • 1970-01-01
          • 1970-01-01
          • 2016-11-06
          • 2011-03-24
          • 2011-02-20
          • 2017-01-18
          相关资源
          最近更新 更多