2011-02-05 5 views
7

어떻게 내 풍부한 텍스트 상자를 투명하게 만들 수 있습니까?
이 사촌을 원합니다 그래픽 이미지 (내 양식의 배경) 위에 텍스트를 넣으려고합니다. 내가 .NET, C#을 사용하고, 윈도우 폼 응용 프로그램transparent richTextBox

+1

이 코드를 직접 작성하거나 (이미이 코드를 작성한 사람을 찾으십시오.)이 코드를 작성할 필요가 없습니다. – ChristopheD

+1

이 가능한 중복 항목을보십시오 - http://stackoverflow.com/questions/1716427/making-a-textbox-transparent – eandersson

+0

나 혼자서 코드를 작성한다는 것은 무엇을 의미합니까 ?? 방법 것입니다?? –

답변

5

WinForms 컨트롤에는 실제 투명도 같은 것이 없습니다. 투명 모드는 부모의 기본 배경을 상속합니다. 과거에이 문제를 해결 한 방법은 OnPaint 이벤트를 사용한 다음 Graphics.DrawString 메서드를 사용하여 원하는 위치에 텍스트를 배치하는 것이 었습니다.

0

거기에 있어요
나는하여 RichTextBox가 투명하고 싶었 이유

는, 윈도우가 투명 배경으로 Forms 컨트롤이 할 수있는 방법입니다. 많은 사람들이 전에 그것을 시도하고 모두 실패했습니다. 일부는 이국적인 해킹이 떠오르지 만 모두 실패합니다. 이전 Windows Forms가 제공 할 수있는 것보다 고급 렌더링 기능이 필요한 경우 WPF 또는 HTML을 사용하십시오.

+1

올바르지 않습니다. 특히 그래픽 라이브러리를 다룰 때 유용합니다. 모든 Winforms가 GDI + 또는 비트 맵 (본질적으로) 인 동안 투명도로 설정하고 배경 그림을 취소하면 '투명도'가 가능합니다. 불행히도, 이것은 모든 2D 투명도가 작동하는 (거짓 3D 렌더링조차도) 배경이 그려 지거나 그려지지 않은 경우이지만 그려지지 않을 때는 파일의 헤더에 지시가있는 '마스크'색상임을 알게 될 것입니다 그 (것)들과 - 적용되는 간계에 더 통찰을위한 PNG 투명도 명세를보십시오. WPF도 예외는 아닙니다. –

7

나는이 답변이 매우 늦었다 고 알고 있지만,이 일을 쉽게 할 수있는 사람들을 돕기를 바랍니다.

먼저 프로젝트에 새 사용자 정의 컨트롤을 만들고 이름을 지정합니다 (예 : CustomRTB.cs).

public partial class CustomRTB : UserControl 

에 :

public partial class CustomRTB : RichTextBox 

이 그렇게 단지 Designer.cs 파일로 이동/주석을 제거하면 디자인 파일을 열면 오류가 발생합니다 일단 완료, 부분 클래스와 변화를 엽니 다 오류를 표시하는 행 (오류가있는 행은 두 개가 넘지 않습니다). 다음으로, 부분 클래스에 다음을 추가

protected override CreateParams CreateParams 
{ 
    get 
    { 
     //This makes the control's background transparent 
     CreateParams CP = base.CreateParams; 
     CP.ExStyle |= 0x20; 
     return CP; 
    } 
} 

클래스 모습은 다음과 같습니다

public partial class CustomRTB : RichTextBox 
{ 
    public CustomRTB() 
    { 
     InitializeComponent(); 
    } 

    protected override CreateParams CreateParams 
    { 
     get 
     { 
      //This makes the control's background transparent 
      CreateParams CP = base.CreateParams; 
      CP.ExStyle |= 0x20; 
      return CP; 
     } 
    } 
} 

이제 솔루션을 구축하고 당신은 당신의 형태로 컨트롤을 사용할 수 있습니다. 이 컨트롤은 완전히 투명하므로 투명도를 조정할 수 없습니다. 또한이 코드의 첫 번째 행을 변경하여 richtextbox와는 다른 투명 컨트롤을 만들 수 있습니다. 희망이 도움이됩니다 :)

편집 :

위의 제어 문제는 단지 @nevelis으로 (가 실행하거나 응용 프로그램을 디버깅하는 동안 편집 할 문제가 프로그래밍 방식의 텍스트를 표시하는 데 사용할 수 있다는 것입니다

아래의 코멘트에서 설명합니다). 그러나이 간단한 해결 방법은 다음과 같습니다.

첫 번째로 프로젝트에 다른 사용자 정의 컨트롤을 만들고 이름을 TranslucentPanel.cs로 지정합니다 (예, 패널이며 불투명도가 프로그래밍 방식으로 제어 될 수있는 반투명 임) . 이제 부분 클래스를 열고로 수정 : 당신은 단순히 그것을 던져 Designer.cs 파일의 라인을 주석하여 프로젝트를 빌드 할 때 돌발 오류를 돌봐해야합니다

public partial class TranslucentPanel : Panel 
{ 
    public TranslucentPanel() 
    { 
     InitializeComponent(); 
     SetStyle(ControlStyles.SupportsTransparentBackColor | 
      ControlStyles.OptimizedDoubleBuffer | 
      ControlStyles.AllPaintingInWmPaint | 
      ControlStyles.ResizeRedraw | 
      ControlStyles.UserPaint, true); 
     BackColor = Color.Transparent; 
    } 
} 

.작업이 완료되면 프로젝트를 다시 빌드하면 반투명 패널이 도구 상자에 나타납니다. 이 패널을 투명한 리치 텍스트 상자의 상위 컨트롤로 사용합니다. 즉, 양식에 패널을 배치하고 내부에 RTB를 배치합니다. BorderStyle 속성을 None으로 설정하여 UI에서 RTB 추적을 제거 할 수도 있습니다.

또한 프로그램에서의 BackColor 속성을 사용하여 반투명 패널의 투명도를 제어 할 수 있습니다 : 당신이 불투명하고 패널의 색상을 제어 할 수있는 것 이상 전달 된 인수를 변경

translucentPanel1.BackColor = Color.FromArgb(50, 0, 0, 0); 

.

이 해결 방법은 투명한 RTB뿐만 아니라 사용자가 만드는 다른 투명 컨트롤의 커서 및 스크롤 문제를 해결합니다.

+1

스크롤이나 편집시이 기능이 잘 작동하지 않습니다. 0x20 또는 WS_EX_TRANSPARENT는 부모 창이 그려지지 않으면 컨트롤이 다시 그려지지 않음을 의미합니다. 입력 할 경우 각 문자 다음에 커서가 놓이고 스크롤하면 흐리게 처리됩니다. ( – nevelis

+0

@nevelis이 문제의 해결 방법을 포함하도록 내 대답을 편집했습니다. 도움이되는지 말해주십시오 :) –

+0

오 빌어 먹을 넌 전설이야. DI가 이것을 리치 텍스트 상자로 테스트하지는 않았지만 편집은 사용자 정의 투명 진행률 표시 줄을 깜박임에서 멈추는 데 필요한 것입니다. D : D : D는 내 하루를 만들었습니다. RichTextBox를 약간 테스트 해 보도록하겠습니다. – nevelis