2013-04-25 2 views
1

이 코드는 http://aforge.googlecode.com/svn/trunk/Samples/Imaging/ShapeChecker/MainForm.cs이지만이 값을 중심, 반경 모서리 및 레이블로 변수에 써야합니다. 그러나 ProcessImage(Bitmap bitmap)은 class2와 class1에 등록되어 있습니다.레이블에 float 변수 쓰기

클래스 2에서 클래스 1로 변수를 가져오고 텍스트 상자에 덤프 할 때 어떻게해야합니까?

class class1 
{ 

    AForge.Point center; 
    float radius; 
    List<IntPoint> corners;  

    private void ProcessImage(Bitmap bitmap) 
    { 
    ... 
    } 
} 

class class2 
{ 
??? label1.Text = center + radius + corners... ??? 
} 
+1

클래스 2의 변수를 공개하면 해당 변수에 액세스 할 수 있습니다. – Dilshod

+0

하지만 float, Point 및 List를 문자열로 변환 할 때 ??? – user2308516

답변

1

클래스 1에서 원하는 데이터 필드를 공개로 표시하십시오. 그런 다음 class2에서 class1을 기반으로 개체를 인스턴스화하면 해당 데이터 필드에 대한 액세스 권한이 부여됩니다. 내장 된 .ToString() 메서드를 적용하여 부동 소수점과 Point를 변환합니다. 목록을 반복하고 IntPoint.ToString() 메서드를 호출해야합니다.

class class1 
{ 

    public AForge.Point center; 
    public float radius; 
    public List<IntPoint> corners;  

    private void ProcessImage(Bitmap bitmap) 
    { 
    ... 
    } 
} 

class class2 
{ 
    class1 myClass1 = new class1(); 
    private void setTextLabel() 
    { 
     label1.Text = myClass1.center.ToString(); 
     label1.Text += myClass1.radius.ToString(); 
     foreach (IntPoint ip in myClass1.corners) 
     { 
      label1.Text += ip.X.ToString(); 
      label1.Text += ", "; 
      label1.Text += ip.Y.ToString(); 
     } 
    } 
} 

완벽하게 작동하는 구현이 아래에 나와 있습니다. 저는 이것을 웹 프로젝트로했습니다.
으로 Class1.cs :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using AForge; 

namespace stack_question 
{ 
    public class Class1 
    { 
     public AForge.Point center; 
     public float radius; 
     public List<IntPoint> corners; 

     public Class1() 
     { 
      center = new AForge.Point(3.3F, 4.4F); 
      radius = 5.5F; 
      corners = new List<IntPoint>(); 

      corners.Add(new IntPoint(6, 7)); 
      corners.Add(new IntPoint(8, 9)); 
     } 
    } 
} 

Class2.aspx.cs 마지막으로

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using AForge; 

namespace stack_question 
{ 
    public partial class Class2 : System.Web.UI.Page 
    { 
     Class1 myClass1 = new Class1(); 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      setTextLabel(); 
     } 

     private void setTextLabel() 
     { 

      label1.Text += "Center: " + myClass1.center.ToString() + "<br/>"; 
      label1.Text += "Radius: " + myClass1.radius.ToString() + "<br/>"; 
      foreach (IntPoint ip in myClass1.corners) 
      { 
       label1.Text += "IntPoint: " + ip.X.ToString(); 
       label1.Text += ", "; 
       label1.Text += ip.Y.ToString() + "<br/>"; 
      } 
     } 
    } 
} 

, Class2.aspx : 웹 페이지에

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Class2.aspx.cs" Inherits="stack_question.Class2" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Label ID="label1" runat="server" Text=""></asp:Label> 
    </div> 
    </form> 
</body> 
</html> 

출력은 다음과 같습니다

Center: 3.3, 4.4 
Radius: 5.5 
IntPoint: 6, 7 
IntPoint: 8, 9 
+0

아니요, 메소드'class1 myClass1 as new class1(); '가 작동하지 않습니다. 'class1 myClass1 = new class1();'다음과 같은 인스턴스를 만들었지 만 오류를보고합니다 : ''AFString.IntPoint '에는'toString '에 대한 정의가없고 첫 번째 인수를 허용하는 확장 메서드'toString '이 없습니다. 'AForge.IntPoint'타입을 찾을 수 있습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) ' – user2308516

+0

아이디어가 있습니까? – user2308516

+0

인스턴스화 행에 대한 구문이 정확합니다. 그리고 두번째로 IntPoint를 사용할 때 전체 IntPoint보다는 X 및 Y 좌표에서 .toString을 호출해야합니다. 위의 코드를 수정했습니다. – Alex