2012-03-20 4 views
2

내 문제는 String을 System.Drawing.Color로 구문 분석하려고한다는 것입니다. 간단한 메모장을 만들려고 시도 중입니다. 내 코드의 일부입니다.다시 ToString toString (Visual Basic 2008)

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 

미리 감사드립니다.

답변

5

cdlg.Color.ToString을 사용하면 나중에 읽을 수있는 문자열로 변환되지 않습니다. 그냥 "color [Yellow]"로 변환합니다..

Color.FromName을 사용하려는 경우 "노란색"을 전달해야합니다. 그렇지 않으면 예상치 못한 결과가 반환됩니다. 아마도 디폴트 값을 가진 컬러 객체 일 겁니다.

나는 당신이 그러나 당신이 좋아하는 사용할 수있는 당신은, 문자열 "노란색"를 반환하는 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

0

이름이 적절하고 아무런 문제가없는 ToString (**)을 사용한다면 Color.FromName 메서드를 사용하면됩니다. 조심해야하지만; reciente 콘텐츠를 편집 할 수있는 경우 일부 문제가 생길 수 있으므로 당연히 시도를 전환으로 전환해야하지만 으로 예상됩니다. Color.ToString는 색의 명확한 이름이 아닌 뭔가 다른을 반환 할

** 것이 가능하다 :

'색상이에서 생성 된 경우,이 컬러의 이름을 나타내는 문자열 FromName 메서드 또는 FromKnownColor 메서드를 사용하여 미리 정의 된 색. 그렇지 않으면 ARGB 구성 요소 이름과 해당 값으로 구성된 문자열입니다. '

+0

그래, 고마워.하지만 이제는 또 다른 문제가 생겼어. "reciente1"을 누를 때마다 버튼 텍스트의 색 대신에 검은 색이된다. 누군가 내게 해결책을 줄 수 있다면 제발. 모두에게 미리 감사드립니다. – minimino

3

당신은 ForeColor에 할당하기 위해 컬러 객체를 얻을 필요가있다.

Color.FromName 방법 매칭 Color 객체 string을 반환한다 (가정 그것은 존재)

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

그래, 고마워.하지만 이제는 또 다른 문제가 생겼어. "reciente1"을 누를 때마다 버튼 텍스트의 색 대신에 검은 색이된다. 누군가 내게 해결책을 줄 수 있다면 제발. 미리 감사드립니다. – minimino

1

이 윈폼 또는 WPF는?

WinForms에는 알고있는 색 이름을 다시 색으로 변환하는 Color.FromName이 있습니다. 그래서 당신은 같은 것을 할 수 있습니다 : WPF에서

Color.FromName("SlateBlue") 

를, 난 당신이 ColorConverter 클래스를 사용할 수 있다고 생각합니다.

+0

그래, 고맙다.하지만 지금은 또 다른 문제가있다. "reciente1"을 누를 때마다 단추 텍스트의 색 대신 검정색이 검은 색으로 변한다. 누군가 내게 해결책을 줄 수 있다면 제발. 모두에게 미리 감사드립니다. – minimino

+0

@minimino : 별도의 질문처럼 들립니다. "reciente1"의 클릭 핸들러 코드는 무엇입니까? "검은 색"이란 무엇입니까? –