2017-09-17 11 views
-1

.NET 4.6.1. 윈도우 폼 usercontrol을 만들었습니다. Control 대신 System.Windows.Forms.TreeView를 상속하도록 변경했습니다. 그것에 (디자이너에서) 라벨을 추가했는데, 라벨을 언제 컨트롤 안에 넣을지 결정합니다. 컨트롤은 폼에 배치되고 런타임에는 트리 구조로 채워집니다 (제대로 수행 됨). 문제는 Visible 속성이 런타임에 True로 설정된 경우 레이블이 표시되지 않는다는 것입니다.사용자 정의 컨트롤 안의 레이블이 보이지 않음

Public Class Treeview111 
Inherits System.Windows.Forms.TreeView 
... 
Public Sub ShowLabel 
Label1.Visible=True 
End Sub 

Visible 속성이 디자이너에서 True로 설정된 경우에도 레이블은 표시되지 않습니다. 런타임에 Label을 동적으로 추가하려했지만 행운이 없었습니다. 나는 또한 그것을 친구에게서 대중에게 바꾸는 것을 시도했다. BringToFront도 도움이되지 않았습니다. 위치를 확인했는데 논리 값 (45,72) 안에있는 것으로 보입니다.

다른 것을 생각할 수 없습니다. 내가 놓친 게 있니? 내가 성취하려고 노력하고있는 것이 가능한가?

+1

가장 중요한 코드가 누락되었습니다. 생성자 (Sub New)에 어떤 일이 발생했는지 분명하지 않습니다. InitializeComponent() 호출은 중요합니다. Form 또는 UserControl에서 파생되지 않는 클래스 (디자이너로 더 이상 수정할 수 없음)에는 의미가 없지만 Me.Controls.Add (Label1) 호출은이를 볼 수 있도록 중요합니다. –

+0

>> 가장 중요한 코드가 누락되었습니다. 생성자 (Sub New)에 어떤 일이 발생했는지 분명하지 않습니다. InitializeComponent()에 대한 호출을 생략하면 경고가 표시되므로 누락 될 가능성이 없으므로이 점이 나에게 분명해 보였다. 또한 VB.NET에서는 "Me.Controls.Add (Label1)"이 VS 자체에서 Form.Designer.vb 파일에 자동으로 추가됩니다. 그 두 가지 이유 때문에 나는 downvote에 대한 필요성을 보지 못합니다. 나는 여기서 문제를 일으킬 수있는 것을 이해하지 못했기 때문에 어디를보아야하는지 구체적으로 묻습니다. 어쨌든 귀하의 회신은 올바른 방향으로 나를 가리켰습니다 (회신 참조). – FaultyOverflow

+0

글쎄, 우리에게 좋은 repro code를 보여줘. 현재 작동하지 않는 이유를 추측 할만큼 충분하지 않습니다. 그것이 작동하지 않아야하는 근본적인 이유는 없습니다. –

답변

0

Hans Passant의 답변 덕분에 올바른 방향으로 향하게되었습니다. Visual Studio의 UI를 통해 Label을 UserControl에 추가했습니다. VS에서 거의 항상 수행 한 것처럼 필요한 모든 코드를 소스 파일에 추가 할 것으로 예상했습니다. VS2013은 다른 컨트롤을 상속 한 usercontrol에 컨트롤을 추가 할 때 모든 요소가 소스 코드에 자동으로 추가되지는 않습니다. 내가 예상이 경우 다음 문은 자동으로 Designer.vb 파일에 VS 추가되지 않은 :

Me.Controls.Add(Label1) 

내가 수동으로 추가하고 문제가 해결.