2012-08-02 7 views
3

각 클래스에 2 개의 .cs 파일이 있습니다. Form2.cs 내부의 다른 클래스에서 Form1.cs 클래스의 메서드를 호출하려면 어떻게합니까?하나의 .cs 파일 클래스에서 다른 .cs 파일 클래스의 메서드 사용

Form1.cs 

public partial class Class1 : ClassContainer 
{ 
    public void awesomeMethod() 
     { 
     } 
} 

Form2.cs 

class Class2 : SomethingChanged 
{ 
    public void decentMethod() 
    { 
    } 
} 

내가 decentMethod의 내부() awesomeMethod를 호출하고 싶습니다 ... 이런 식으로 뭔가를 보이는(). 감사합니다. .

+0

공유하세요 down 투표 됨 – Garrett

+0

귀하의 질문에 명확하지 않습니다. Class2 내의 Class1에 대한 참조 만 작성하면됩니다. 물론 Class1이 실제로 Form 일 경우 실제로이 작업을 수행하고 싶지는 않습니다. –

답변

5

너는 그런 뜻이야?

public void decentMethod() 
{ 
    Class1 instance = new Class1(); 
    instance.awesomeMethod(); 
} 

메서드를 호출 할 클래스의 인스턴스가 필요합니다. ... 내가 추측하고있어

public void decentMethod() 
{ 
    Class1.awesomeMethod(); 
} 
+0

시도, 0 개의 인수를 사용하는 생성자가 포함되어 있지 않습니다. 나는 im가 무언가를 간단하게 놓치고 있다고 느낀다. 그러나 그것은 거친 주이었다. – Garrett

+0

그래서 생성자는 어떻게 생겼습니까? – sloth

+0

고마워, 아프지 만 정적 보이드 만해라. 누군가 elses 3k 라인 코드를 정리하고 몇 가지를 놓쳤습니다. 시간 제한이 만료 될 때 불량을받습니다. – Garrett

0

public partial class Class1 : ClassContainer 
{ 
    public static void awesomeMethod() 
    { 
    } 
} 

: 당신이 필요하지 않은 경우


또는, /, 인스턴스와 함께 작동이 정적 방법 만들고 싶어 이것들은 실제 메소드 서명이 아닙니다.

awesomeMethoddecentMethod 회원에 대한 참조가 필요합니까? 클래스의 인스턴스 메소드를 호출하기 위해

new Class1().awesomeMethod(); 
4

, 당신은 클래스의 인스턴스가 필요합니다

하지 않으면, 그것은 간단하다. 따라서, 당신은 클래스 1의 인스턴스를 생성해야하며, 클래스 1의 awesomeMethod를 호출 :

Class1 c = new Class1(); 
c.awesomeMethod(); 

당신의 서두에서, 두 개의 실제 클래스가 서로 다른 두 가지 형태가있는 것처럼하지만, 그것은 소리. 이 경우 하나의 양식이 다른 양식의 새 인스턴스를 순수하게 생성하여 도우미 방법 일 가능성이 높습니다. 두 번째 양식을 만들면 잠재적으로 엄청난 오버 헤드가 발생할 수 있습니다. 도우미 메서드를 별도의 더 가벼운 클래스에 추가하는 것이 좋습니다.

0

여기 Visual Studio에서 시도해 볼 수있는 내용이 있습니다. 귀하의 을 쓰십시오 을 사용하십시오. 정의가 없습니다. 예를 들어, 어딘가에 코드를 입력 :

cls_a instance_a;

은 그럼 당신은 cls_a 아래 구불 구불 한 선을 얻는다. 마우스 오른쪽 버튼으로 "cls_a"를 클릭하고 팝업 메뉴에서 생성을 선택하십시오. 그런 다음 어떻게되는지보십시오.

App_Code 디렉토리가 생성 된 것을보고 클래스 cls_a가 해당 디렉토리의 cls_a.cs 파일에 생성되었습니다. Visual Studio에서 정의를 생성했습니다. 그리고 컴파일됩니다.

그런 다음이 같은 cls_a에서 정의하지 않고하는 방법의 사용을 입력 할 수 있습니다

instance_a.meth_x();

다시, 구불 구불 한 선을 마우스 오른쪽 버튼으로 클릭하고 생성을 선택합니다. Visual Studio에서 정의를 생성합니다.

ASP .NET은 추가 클래스를 App_Code 하위 디렉터리에 넣어야한다고 생각합니다. 그리고 ASP.NET을 구부릴 필요가 있다면 Web.config 파일을 편집하여 원하는 위치에 코드 파일을 저장할 수 있다고 생각합니다. 나는 이것을 어떻게하는 지 검토하지 않았으므로 나는 당신이나 다른 누군가에게 맡깁니다.

어쨌든 App_Code 하위 디렉토리에 클래스와 메소드가 없으면 클래스 코드와 함수가 웹 양식 코드에서 보이지 않을 수 있습니다.

0

나는 초급자이며 같은 것을 궁금해했다. 네가 묻고있는 것을 내가 이해한다고 믿는다. 방금 시도한 후 몇 번의 시도를 거친 후이를 클릭하고 새 것에 대해 어쩌면 내 말로 간단하게 할 수 있습니다. 어떤 프로그램을 사용하고 있는지 모르겠지만 Visual Studio 2016을 사용했습니다. 두 개의 폼 (Form1과 Form2)이 각각 버튼을 포함하여 만들어졌습니다. Form1 단추와 Form2 단추. Form1 버튼을 클릭하면 form2의 메소드가 호출되고 Form2 버튼을 클릭하면 Form1의 메소드가 호출됩니다. 솔루션 탐색기에서 두 가지 형태와 그 안에 들어있는 모든 것을 보여줍니다. 나는 많은 연구를 해왔고 내가 틀렸다면 수정 해 주었지만, 부모 컨테이너에서 자식 (네임 스페이스> 클래스> 메소드)과 같은 순서로 진행된다고 나는 믿는다. 이 사실을 믿기 때문에 나는 그 메소드를 호출하기 전에 클래스를 호출해야한다고 생각했습니다.

이것은 내 스크립트입니다.

를 Form1 :

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Form2 frm2 = new Form2(); 
     frm2.Show(); 
    } 

    private void f1button_Click(object sender, EventArgs e) 
    { 
     f2Words f2w = new f2Words(); 
     f2w.Words2(); 

    } 
} 
public class f1Words 
{ 
    public void Words1() 
    { 
     MessageBox.Show("Form 1 Method Calling Worked!"); 
    } 
} 

형식 2 : 솔루션 탐색기 창에서

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 

    } 

    private void f2button_Click(object sender, EventArgs e) 
    { 
     f1Words f1w = new f1Words(); 
     f1w.Words1(); 

    } 
} 
public class f2Words 
{ 
    public void Words2() 
    { 
     MessageBox.Show("Form 2 Method Calling Worked!"); 
    } 
} 

그것은을 Form1과 Form2를 모두의 클래스를 보여줍니다. 그래서이 클래스의 새로운 인스턴스를 호출하기로 결정했습니다.

"f1Words f1w = 새 f1words()"및 "f2Words f2w = 새 f2Words()".

그런 다음이 클래스의 새 인스턴스를 포함 된 메서드로 재생 해 보았습니다.

는 "f1w.Words1()"및 "f2w.Words2()"

최종 결과는 성공적이었다. Form1의 Button1을 클릭하면 Form2의 F2Words 클래스를 호출하고 "Form2 Method Calling Worked!"라는 메시지 상자를 열고 Form2 Button2에 대해 Words2 Method를 꺼냅니다.

이 게시물은 4 세입니다. 독자 분이 이미이 사실을 발견했으며 더 나은 해결책을 찾았을 것이라고 추측합니다. 그러나 앞으로이 같은 질문을하는 다른 사람들에게도 이것이 도움이되기를 바랍니다.

0

메인 폼이 frmMain이라고 가정합니다.frmMain()의 생성자 외부에서 정적 선언을 만듭니다. 같은 생성자 내에서 할당 :

public static frmMain p_frmMain = null; 
public frmMain() 
{ 
    InitializeComponent(); 
    : 
    p_frmMain = this; 
} 

를 다른 클래스에서 (같은 솔루션의 주요 네임 스페이스를 사용), 메인의 'btnHelloWorld_Click()', 말, 호출 방법이 왜

AnotherClass_EventHandler(object sender, EventArgs e) 
{ 
: // Call frmmain()'s 'btnHelloWorld_Click' event: 
    frmMain.p_frmMain.btnHelloWorld_Click (sender, e); 
: 
} 
// Quick, dirty and done. 
관련 문제