2012-01-26 4 views
0

시간이 많이 걸리는 프로세스를 시작하는 단추가 있습니다. 사용자가이 버튼을 가리키면 도구 팁이 표시됩니다. 그러나이 프로세스가 백그라운드 스레드로 재 라우팅되기 전에 (일부 작업을 수행하는 데 10 초 정도 걸립니다) 툴팁은 반투명으로 표시됩니다. 이 코딩은 끔찍한 일이며 UI 스레드가 아닌 UI에 즉시 적용해야한다는 것을 알고 있습니다. 그러나 이것이 현재의 방법입니다 ...단추 도구 팁을 끝내는 방법 프로그래밍 방식으로 표시

내 질문은 어떻게 단추 도구에 대한 참조를 얻을 수 있습니까? 팁 개체가 표시되지 않도록 할 수 있습니까? , 내가이 일을위한 역겨운 사람임을 aknowledge

ToolTip someTT = Button.ToolTip; // This only gets or set the tool tip text. 
someTT.Active = false; 
someTT.Dispose(); // As a last resort. 

죄송 사람 : 난 것처럼보고 직시.

편집 : 버튼은 Studio 용 WinForms의 일부로 구성된 콤포넌트 원 RibbonButton 유형입니다.

답변

2

당신이 ToolTip 작업을 할 때 일반적으로, 당신은 Form.InitializeComponent() 메소드 내에서 다음 코드를 찾을 수 있습니다

this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); 
this.button1 = new System.Windows.Forms.Button(); 
//... 
this.toolTip1.SetToolTip(this.button1, "Tooltip for button1"); 

는 따라서 동일한 접근 방식을 사용하여 특정 버튼에 대한 도구 설명을 비활성화 할 수 있습니다 :

this.toolTip1.SetToolTip(this.button1, null); 

또한 백그라운드 스레드가 시작되었을 때 버튼을 비활성화 할 수 있습니다. 이렇게하면이 버튼 위에있는 불필요한 툴팁을 피할 수 있습니다.

void button1_Click(object sender, EventArgs e) { 
    toolTip1.Hide(button1); 
    button1.Enabled = false; 
    //start the background thread here 
} 
+0

답변 해 주셔서 감사합니다. 그러나 SDK (ComponentantOne) 사용하고 있기 때문에 컨트롤에 대한 일반 도구 설명에 대한 참조를 찾을 수 없습니다. 내가 네가 할 수 있다면 아주 청초한 대답이 될거야. 디자이너를 통해 (리본) 버튼에 대한 툴팁을 설정 했으므로 실제 툴팁 오브젝트에 액세스하는 방법이 명확하지 않습니다. 어떤 아이디어? 시간 내 줘서 고마워. – MoonKnight

+0

사용중인 ComponentOne 컨트롤에 대한 정보로 질문을 업데이트해야합니다. RibbonButton.Tooltip 속성에 "null"값을 설정하거나 RibbonButton.Enabled 속성에 "false"값을 설정하면 도구 설명이 표시되지 않습니다. (실제 C1의 툴팁 엔진 아키텍처를 모르지만 액세스 할 필요가 없다고 생각합니다. 귀하의 경우에 직접 툴팁 객체). – DmitryG

1

프로젝트에 추가 한 ToolTip 컨트롤로 작업해야합니다. ToolTip.Active과 같은 것이 작동 할 수 있습니다. 위의 링크에서

: Active 속성으로

활성화하거나이 특정 도구 설명 구성 요소에 의해 지정된 텍스트가있는 모든 컨트롤 도구 설명 텍스트의 표시를 비활성화 할 수 있습니다. 둘 이상의 도구 설명 구성 요소 을 만들고 양식에 할당 할 수 있지만 Active 속성을 false로 설정하면 현재의 도구 설명에만 영향을줍니다.

0

UI 스레드가 작업을 수행중인 경우 툴팁을 숨길 방법을 찾으면 UI 스레드가 다시 해제 될 때까지 UI 스레드가 여전히 작동하지 않습니다.

당신의 솔루션은 당신이 항상 알고 있었던 것입니다. 비 UI 처리를 비 UI 스레드로 옮기십시오.

+0

위의 질문에 대한 대답이 아닙니다. – MoonKnight

+0

@Killercam 버튼을 클릭 한 후에 도구 설명을 숨기려고했지만 전체 화면이 표시되지는 않습니다. 호버링을 할 때 툴팁이 좋다는 사실은 그 믿음을 뒷받침하는 것으로 보입니다. 따라서 클릭 이벤트에서 툴팁을 숨기려고하고 있고 해당 클릭 이벤트에서 10 초의 작업을 수행 중이라고 가정하면 너무 늦을 때까지 UI 변경 사항이 적용되지 않습니다. 따라서 그의 질문에 대한 답은 자신의 제한을 감안할 때 대답 할 수 없다는 것입니다. – Servy

+0

당신은 내가 원했던 바를 가지고 있습니다. 그것은 할 수 있습니다. 일부 처리가 UI 스레드에서 수행된다는 사실 때문에 일부 그래픽 등을 업데이트/다시 그리기 위해 같은 스레드를 사용할 수 없다는 것을 의미하지는 않습니다. UI 스레드에서 일부 작업을 수행 할 수 있음을 설명하기 위해 -> '열심히해라.'그리고 나서 myControl.Update()를 통해 중간에, myControl'; 내 처지를 희생해서. 감사합니다. 감사합니다. – MoonKnight

관련 문제