2012-02-23 2 views
-1

해결 방법을 모르는 고유 한 고객 요청이 있습니다.C# 차단 단추 찾아보기

고객이 파일을 선택하는 찾아보기 버튼이있는 웹 페이지 양식이 있습니다. 찾아보기 버튼을 클릭하면 로컬 파일을 표시하는 대신 코드를 입력 할 수있는 텍스트 상자가있는 팝업 창이 나타납니다. 그런 다음이 코드를 사용하여 각각 자신의 코드가있는 1000 개의 파일이 들어있는 로컬 폴더에서 파일을 선택합니다. 사용자가 해당 폴더의 다른 파일을 볼 수 없도록하려고합니다.

웹 페이지 양식을 모방하기 위해 사용자 지정 Windows 양식을 작성했지만 이미 웹 페이지를 온라인으로 가지고 있으므로 다시 사용하고 싶습니다.

어떤 방법으로 찾아보기 버튼을 차단할 수 있습니까? 웹 브라우저 구성 요소와 함께 C# 응용 프로그램을 사용할 수 있지만 찾아보기 단추를 가로 챌 수 있습니까?

+5

을 게시하는 구성한다. 당신은 묻습니다, "어떻게이 못을 조이 지?" 대답은 손톱을 사용하지 말고 나사를 사용하는 것입니다. – asawyer

+0

또한 -이 구성표는 파일에 접근 할 때까지 사람들이 임의 코드를 입력하는 것을 얼마나 정확하게 막을 수 있습니까? – asawyer

+0

파일이 사용자의 컴퓨터에 있습니까? 컴퓨터에있는 동안 사용자가이 파일을 볼 수 있다는 것을 알고 계십니까? –

답변

0

실제 파일 브라우저를 표시하지 않습니다.

을의에 해당 하나 개의 파일을 보여주는 하나를 모방하거나 파일 경로를 알고 있기 때문에 올바른 코드 복사를 만든 임시 폴더에 파일을 입력 할 때와 파일 브라우저를 열어 해당 폴더를 탐색하면 해당 파일 만 포함됩니다.

+0

어떻게 실제 파일 브라우저를 표시하지 않습니까? 이것은 로컬 컴퓨터에서로드 된 웹 페이지가 아니라 서버에서로드 된 실제 웹 페이지라는 점에 유의하십시오. – Christian

1

작동하는 유일한 옵션은 웹 브라우저 구성 요소에 C# 응용 프로그램을 사용하는 것입니다.

  1. 페이지의 DOM을 한 번 심문 : 당신은 다음 두 가지 옵션이 있습니다

    window.external.ShowPickerWindow(); 
    

    : 그런 다음에 javscript를 통해 사용자 정의 선택기 창을 트리거하기 위해 호출 할 수있는 방법, 예를 제공하기 위해 WebBrowser.ObjectForScripting을 사용할 수 있습니다 로드되고 선택기 창을 트리거하는 버튼으로 바꿉니다.

  2. 고객에게 window.external.ShowPickerWindow 메소드의 존재 여부를 확인하도록 페이지를 변경하게하고 기본적으로 (1) 옵션을 사용합니다.

그런 다음 페이지에서 코드를 추출하기 위해 window.external.GetPickedCode()이라고하는 방법을 사용할 수 있습니다.

1

롭 킨더는 나를 올바르게 이끌어주는 "버튼 교체"라고 말하면서 올바른 사고 트랙을 따라 나를 조종했다!

간단히 말해, 찾아보기 단추를 숨기고 옆에 새 단추를 삽입하면 클릭 할 때 텍스트 상자가있는 새 창이 열립니다. 그런 다음이 텍스트 상자는 부모 양식에 문자열 값을 설정합니다.이 값은 onSubmit을 사용하여 파일을 첨부합니다.

private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     HtmlElement btnBrowse = wb.Document.GetElementById("fiPhoto"); 
     if (btnBrowse != null) 
     { 
      HtmlElement newbtn = wb.Document.CreateElement("input"); 
      newbtn.SetAttribute("id", "btnLoad"); 
      newbtn.SetAttribute("type", "button"); 
      newbtn.SetAttribute("value", "Load"); 
      newbtn.Click += new HtmlElementEventHandler(newbtn_Click); 
      btnBrowse.Parent.AppendChild(newbtn); 

      btnBrowse.Style = "display:none"; 
     } 

     HtmlElementCollection forms = wb.Document.Forms; 
     if (forms.Count > 0) 
     { 
      HtmlElement form = wb.Document.Forms[0]; 
      form.AttachEventHandler("onsubmit", delegate(object o, EventArgs arg) 
       { 
        FormToMultipartPostData postData = new FormToMultipartPostData(wb, form); 
        postData.AddFile("photo", photo); 
        postData.Submit(); 
       }); 
     } 
    } 

    private void newbtn_Click(object sender, EventArgs e) 
    { 
     Form2 frm = new Form2(this); 
     frm.ShowDialog(); 
    } 

FormToMultipartPostData 여기에 게시 할 너무 큰하지만 기본적으로 수동으로 내용 - 처리 당신은 못이

+0

환상적입니다. 다행이라고 생각합니다. – asawyer