2010-12-14 4 views
1

form1이 있는데 "다운로드"버튼과 "다음"버튼이 있습니다. 기본적으로 "다음"버튼은 비활성화되어 있습니다. "download"버튼을 클릭하면 form1.cs와는 다른 download.cs 메소드가 호출됩니다. 다운로드가 끝나면 "다음"버튼을 활성화해야합니다. 따라서 download.cs에서 모든 파일을받은 후C# 다른 클래스의 버튼을 활성화하는 방법

form1.btnNext.Enabled = true;

하지만 작동하지 않습니다. 나는 또한 (부울 가능) Form1.cs를

공공 무효 enableButton에 넣고

{ btnNext.Enabled = 활성화; }

및 download.cs에

내가 넣어 :

개인을 Form1의 Form1을; ...

form1.enableButton (true);

하지만 작동하지 않습니다. any1이 내가 틀린 곳을 보여줄 수 있습니까? 미리 감사드립니다.

+2

당신은 "하여 무엇을 의미합니까 작동하지 않습니까? " 오류가 발생하거나 전혀 발생하지 않습니까? 코드가 실제로 호출되었는지 확인하기 위해 중단 점을 설정 했습니까? – Botz3000

+0

"form1"변수를 만드는 코드를 추가 할 수 있습니까? –

+1

다운로드가 다른 스레드에서 수행 되었습니까? –

답변

0

다운로드 이상

1이 다운 클래스

public delegate void EnableUI(bool shdEnable); 

    public event EnableUI MakeUIEnabled; 

2 후크 당신을 Form1 클래스에서이 이벤트에서 이벤트를 정의하는 동안 귀하의 UI를 동결하는 경우, 난 당신이를 작성한다고 가정 다운로드 버튼에서 다운로드 클래스의 객체 또는이 클래스 레벨에서 생성되고, customDownloader으로이 객체

customDownloader.MakeUIEnabled+=new EnableUI(EnableUIControls); 

3가 Form1에있는 이벤트 투수 정의를 말할 수 클래스를 만듭니다. 다운로드가이 이벤트를 발생보다 완료되면 download.cs에서 downloadfile() 메소드가 있음을

public void EnableUIControls(bool shdEnable) 
    { 
     btnNext.Enabled = shdEnable; 

    } 

3-하자 SYA 때문에 파일.

 public void DownLoadFile() 
     { 
      if(MakeUIEnabled!=null) 
      MakeUIEnabled(true); 

     } 

그쪽의는

+0

예, 여기 있습니다. 그것은 나를 위해 잘 작동합니다. 하지만 이제는 다시 작은 폼이나 대화 상자 팝업을 통해 파일을 다운로드하는 중임을 나타내야한다고 생각합니다.하지만 나중에는 나중에 내 개선을 먼저 완료해야합니다. 다시 한 번 감사드립니다, ur 코드는 나에게 무리를 돕고, 스레드 및 위임/이벤트 핸들에 대한 내 머리 속의 일부 클라우드를 정리했습니다. – PeteMerry

2

귀하의 질문에 좀 더 자세한 정보가 필요하지만 귀하의 다운로더 클래스에있는 form1의 인스턴스가 귀하의 화면에 표시된 인스턴스와 같지 않다고 생각합니다.

다운로더가 시작한 양식으로 콜백 할 수 있다면 가장 쉬운 방법은 해당 양식에 대한 참조를 다운로더 클래스에 전달하는 것입니다.

0

나는 이와 비슷한 문제에 직면 한 것을 기억하고 개인적으로 (다음) buttonpublic을 만들려고 할 수도 있지만, 이것은 매우 사랑스럽지 않은 접근이지만, 모자를 쓰면 첫 번째 제안이 효과가있을 것입니다.

하고 당신이이 일을 시도 할 수 있습니다하지 않는 경우

를 Form1 myForm을 = 새 Form1에; myform.nxtButton.enabled = true;

확실히

+0

죄송합니다. 이미 form1.designer.cs에서 버튼의 속성을 public으로 변경했는데 작동하지 않는다고 추가하는 것을 잊어 버렸습니다. – PeteMerry

0

당신은 새로운 클래스에 버튼에 대한 참조를 통과 할 수 작동합니다. 따라서 download.cs에서 메서드를 호출하면 버튼의 이름을 매개 변수로 전달한 다음 다른 참조와 마찬가지로 새 클래스에서 사용할 수 있습니다.

0

콜백을 통해 처리 할 수 ​​있습니다. 따라서 Download.cs에는 다음과 같은 내용이 있습니다.

이렇게하면 EnableButton 메서드를 다운로드 메서드에 전달할 수 있습니다.

+0

감사합니다.이 대답은 Saurabh 's와 동일하며 코드의 일부 위치가 변경되어 이제는 제대로 작동합니다. – PeteMerry

0

당신은 Form2Form1에 대한 참조가 필요합니다. Form2은 대화 창, MDI 하위 창 등입니까? Form1이 (가) 부모 창으로 설정되어 있습니까? Form1Form2으로 열리나요?

실제로 Form1이 열리는 경우 Form2에서 Form1에 대한 참조를 갖도록 owner 속성을 설정할 수 있습니다. 또한 Form1button10이 PUBLIC으로 설정되어 있는지 확인하십시오 (기본적으로 비공개입니다). Form1

,이 같은 코드가 있습니다 : 당신이 Form1button10에 액세스 할 때마다, Form2에서

Form2 MyForm2 = new MyForm2(); 

MyForm2.Owner = this; // "this" being Form1 

MyForm2.Show(); 

을, 이렇게 :

(this.Owner as Form1).button10.Enabled = false; 
관련 문제