[英]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
文件並添加一些設置,方法是將Name
和System.Drawing.Color
為Type
並將User
為Scope
並為Value
選擇一種顏色。 然后,您可以使用My.Settings
簡單地使用(讀取,分配,保存,重置)那些設置。
如Andrew Morton所述,它還支持屬性綁定 ,您會發現他的答案很有用。 這樣,您可以在設計時選擇控件,然后在屬性網格中的(ApplicationSettings)
單擊(PropertyBinding)
...
,然后從對話框中將所需的屬性綁定到設置。
您可以在“應用程序設置”中使用屬性綁定,而不必編寫代碼來執行此操作。
現在,當您運行程序時,它將自動將表單的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.