2013-04-13 9 views
1

클래스를 사용하여 HTML 파일을 생성하려고하지만 하나 이상의 HTML 태그를 생성하지 않습니다. 여러개의 HTML 태그를 생성하기 위해 내가 할 수있는 일이 있는지 궁금합니다. 내 HTML 파일의 태그.HTML 파일을 생성하는 클래스 정의

public class GuidClass 
{ 
    public string htmlstringfirst = "<HTML><HEADER><title>My Web-page</title></HEADER><BODY>"; 
    public string htmlstringend = "</form></BODY></HTML>"; 
    public string htmlstring = ""; 
    public GuidClass(string title, string type, string defaultvalue) 
    { 
     htmlstring += "\r\n<input id = " + '"' + System.Guid.NewGuid().ToString() + '"' + "title =" + '"' + title + '"' + "type=" + '"' + type + '"' + ">" + defaultvalue + "</input><br>"; 
    } 
} 


private void button1_Click(object sender, EventArgs e) 
{    
    GuidClass objGuid = new GuidClass(textBox1.Text, textBox2.Text, textBox3.Text); 
    using (FileStream fs = new FileStream(@"D:\test.htm", FileMode.Create)) 
    { 
     using (StreamWriter writer = new StreamWriter(fs, Encoding.UTF8)) 
     { 
      writer.Write(objGuid.htmlstringfirst + objGuid.htmlstring + objGuid.htmlstringend); 
     } 
    } 
    htmlLoadWebbrowser1.LoadHTML(@"D:\test.htm"); 
} 
+0

어떻게 여러 tags'을 생성하는'무엇을 의미합니까? 어떤 종류의 꼬리표? 루프를 사용하십시오. – I4V

+0

폼에 3 개의 텍스트 상자가 있고 버튼을 클릭 할 때마다 텍스트 상자의 값을 HTML 파일에 추가하고 싶습니다. 하지만 버튼을 클릭 할 때마다 재설정됩니다. – Pedram

+1

'objGuid.htmlstring + = textBox1.Text;'? – I4V

답변

1

대신에 web-browser 컨트롤 을 사용하면 웹에 요소를 쉽게 삽입 할 수 있습니다. browser은 어린 이용으로 웹 브라우저를 사용하면 많은 장점이 있습니다.

당신이 페이지를 구축하고 HTML page.this을 절약 할 수 있습니다 간단한 예입니다하지만 당신은 더 많은 일을 할 수 있습니다

//From.cs 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    Html_Class _Html_Class = new Html_Class(); 
    private void Add_Element_Click(object sender, EventArgs e) 
    { 
     HtmlElement userelement = _Html_Class.Create_Tag("p"); 
     userelement.InnerText = "Something"; 
     _Html_Class.Addend_Child(userelement); 
     var s = _Html_Class.Get_Source(); 
    } 

} 
//Html_Class.cs 
public class Html_Class 
{ 
    private WebBrowser wb = new WebBrowser(); 

    public Html_Class() 
    { 
     wb.DocumentText = "<HTML><HEADER><title>My Web-page</title></HEADER><BODY></BODY></HTML>"; 
    } 

    public HtmlElement Create_Tag(string tagname) 
    { 
     return wb.Document.CreateElement("tagname"); 
    } 

    public void Addend_Child(HtmlElement element) 
    { 
     wb.Document.Body.AppendChild(element); 
    } 

    public string Get_Source() 
    { 
    return (wb.Document.DomDocument as mshtml.HTMLDocument).documentElement.outerHTML; 
    } 
} 
1

가 왜 이런 식으로 호출하는 대신 다음 웹 브라우저 컨트롤을 사용하고 : :

htmlLoadWebbrowser1.LoadHTML(@"D:\test.htm"); 

당신 대신 내가 시험이

webBrowser1.Navigate(@"D:\test.htm"); 

과 같이 호출 할 수 여기에 코드입니다 자신의 코드를 사용하면 작동합니다.

둘째, 난 당신이 또한 하나 개의 작은 것은 놓칠 생각하지만 난 그게 중요하다고 생각, 즉, 코드에서, 당신은 :

public string htmlstringfirst = "<HTML><HEADER><title>My Web-page</title></HEADER><BODY>"; 

당신은 폼 요소 시작 태그를 추가하는 것을 잊지나요? 이 같은 :

public string htmlstringfirst = "<HTML><HEADER><title>My Web-page</title></HEADER><BODY><form>"; 
+0

"

"이라는 태그를 잊어 버렸으니 문제는 아니 었습니다. 문제는이 클래스가 호출 할 때마다 HTML 태그를 추가 할 수 있어야한다는 것입니다. 하지만 단지 하나의 태그를 생성합니다 감사합니다. – Pedram

1

GuidClass의 생성자 htmlstring에 추가됩니다. 그러나 그 자체로 새로운 GuidClass을 만들 때마다 빈 문자열로 초기화 된 다음 생성자에 추가되는 htmlstring이라는 자체 복사본이 생성됩니다.

대신 이전 호출 사이에 이전 값을 저장해야합니다.

될 일이 점점에 "적어도 코드 변경"접근 방식은 변경

public string htmlstring = ""; 

public static string htmlstring = ""; 

(static 의미 곳 클래스 공유의 모든 인스턴스 같은 변수) .

또한 objGuid.htmlstring에서 GuidClass.htmlstring으로 전화하는 지점을 변경해야합니다.

이것은 단기간에 효과가 있지만, 코드를 더 깔끔하고 쉽게 유지할 수 있도록 개선 될 수 있습니다. 스택 오버플로는 실제로 그런 유형의 피드백을위한 장소가 아니지만 https://codereview.stackexchange.com/의 유용한 사람들은 올바른 방향으로 사용자를 안내 할 수 있습니다.

관련 문제