簡體   English   中英

在Visual Basic中將字符串轉換為顏色

[英]Convert String to Color in Visual Basic

這是我的主意:退出表單時,它會將背景色保存到位於名為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

當我將鼠標移到它時,它顯示

未為“公共共享函數FromName(名稱作為字符串)作為System.Drawing.Color”的參數“名稱”指定參數。

順便說一下在settings.txt中寫的

顏色[石灰]

有任何建議嗎?

Visual Basic 2008速成版

System.Drawing.Color不是您要為其分配值的東西。 無論您要在哪里設置顏色,我想您都想要像

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

因此,要從該變量讀取它,您可能需要類似以下內容:

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

這些.Replace函數將擺脫文件中多余的字符。

將字符串轉換為顏色

要將字符串轉換為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的答案很有用。

其他可能對您有幫助的選擇

如果要存儲一些顏色作為設置,最好使用Settings.settings My Project Settings.settings下的Settings.settings文件並添加一些設置,方法是將NameSystem.Drawing.ColorType並將UserScope並為Value選擇一種顏色。 然后,您可以使用My.Settings簡單地使用(讀取,分配,保存,重置)那些設置。

Andrew Morton所述,它還支持屬性綁定 ,您會發現他的答案很有用。 這樣,您可以在設計時選擇控件,然后在屬性網格中的(ApplicationSettings)單擊(PropertyBinding) ... ,然后從對話框中將所需的屬性綁定到設置。

您可以在“應用程序設置”中使用屬性綁定,而不必編寫代碼來執行此操作。

  1. 在設計器視圖中選擇表單(即,不是其任何子控件)。
  2. 調出屬性窗口(例如按F4 )。
  3. 單擊“屬性”選項卡(如果您位於“事件”標簽中)。
  4. 展開“((ApplicationSettings)”)部分,然后單擊“((PropertyBinding))”。
  5. 單擊第二列中的省略號按鈕(您可能需要將其懸停在右側才能看到該按鈕)。
  6. 在出現的對話框中,找到“ BackColor”,然后在其右邊的列中單擊“(無)”。
  7. 從下拉列表中,選擇“新建...”。
  8. 為設置輸入一個合理的名稱,如果需要,請選擇“ DefaultValue”。
  9. 好的。

現在,當您運行程序時,它將自動將表單的BackColor設置為上一次運行時的背景色。

如果您在setting.txt中只寫一種顏色,那么您只會犯一種錯誤

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

並且在settings.txt中應該只寫“ Lime”而不是“ Color [Lime]”(不帶引號)

好了,現在它正在工作,這就是我所做的:

在開始時:

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
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM