ToString снова в цвет (Visual Basic 2008) - PullRequest
2 голосов
/ 20 марта 2012

Моя проблема в том, что я пытаюсь разобрать строку в System.Drawing.Color.Я пытаюсь настроить простой блокнот, вот часть моего кода:

Private Sub ToolStripMenuItem6_Click(ByVal sender As System.Object, ByVal e As       System.EventArgs) Handles Colorfuente2.Click
    Try
        Dim cdlg As New ColorDialog
        cdlg.ShowDialog()
        cdlg.FullOpen = True
        cdlg.AnyColor = True
        ColorFuente1.Visible = True
        Colorfuente2.Visible = False
        If Windows.Forms.DialogResult.OK Then
            RichTextBox1.ForeColor = cdlg.Color
            reciente2.Text = cdlg.Color.ToString 'I've converted this tostring, so   that recent colors are shown as text, this is what im trying to reverse
        End If
    Catch ex As Exception
    End Try
End Sub

     If Reciente1.Text = "Ninguno" Then
        MessageBox.Show("No hay colores recientes", "Bloc de notas", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    Else : RichTextBox1.ForeColor = Reciente1.Text 'I get the error here, I have to change this text to a System.Drawing.Color.
    End If

Заранее спасибо.

Ответы [ 4 ]

5 голосов
/ 21 марта 2012

Когда вы используете cdlg.Color.ToString, он на самом деле не преобразует его в строку, которую он может прочитать позже.Он просто конвертирует его во что-то вроде "color [Yellow]" .

Если вы хотите использовать Color.FromName, вам нужно будет передать его просто "Yellow" в противном случае он вернет что-то неожиданное.Вероятно, цветовой объект со значением по умолчанию или ничего не значащим.

Я бы предложил вам использовать ColorConverter

Dim colorConv As New ColorConverter
TextBox1.Text = colorConv.ConvertToString(cdg.Color)

Это вернет строку «Желтый», которую вы можетеиспользуйте как хотите.

'Using FormName
TextBox1.BackColor = Color.FromName(TextBox1.Text)
'Using the color converter again (recommended).
Dim colorConv As New ColorConverter
TextBox1.BackColor = colorConv.ConvertFromString(TextBox1.Text)

Вы также можете использовать подстроку, чтобы получить "Желтый" деталь в "Цвет [Желтый]" .: P

3 голосов
/ 20 марта 2012

Вам необходимо получить объект Color , чтобы присвоить его ForeColor.

Метод Color.FromName примет string и вернет соответствующий Color объект (при условии, что он существует):

 If Reciente1.Text = "Ninguno" Then
    MessageBox.Show("No hay colores recientes", "Bloc de notas", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Else 
  Dim col As Color = Color.FromName(Reciente1.Text)
  RichTextBox1.ForeColor = col
End If
1 голос
/ 20 марта 2012

Это WinForms или WPF?

В WinForms есть Color.FromName, который преобразует известное имя цвета обратно в цвет.Таким образом, вы можете сделать что-то вроде этого:

Color.FromName("SlateBlue")

В WPF, я полагаю, вы можете использовать класс ColorConverter.

0 голосов
/ 20 марта 2012

Пока имя правильное, и я ожидаю, что это будет, если вы используете ToString (**) и не будете возиться с ним иначе, вы можете использовать Color.FromName метод.Хотя вы должны быть осторожны;если контент reciente вообще можно редактировать, то у вас могут возникнуть какие-то проблемы, поэтому, естественно, вам следует попытаться преобразование вернуться к работе, но, возможно, не ожидать его преобразования.

** Возможно Color.ToString вернуть что-то другое , отличное от определенного названия цвета:

' Строка, которая является именем этого Цвета, если Цвет создан из предопределенного цвета с использованием метода FromName или FromKnownColor;в противном случае строка, состоящая из имен компонентов ARGB и их значений. '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...