문제

메시지 상자와 같은 간단한 사용자 정의 대화 상자와 레이블과 텍스트 상자가있는 간단한 사용자 정의 대화 상자를 찾고 있습니다. 이 작업을 수행하는 간단한 방법이 있다면 죄송합니다! 나는 대화 상자에 정통하지 않습니다.

도움을 주셔서 감사합니다, 여러분!

도움이 되었습니까?

해결책

다음은 Windows Mobile에서 다음과 같은 작은 사용자 정의 대화 상자를 만드는 방법입니다.

대체 텍스트 http://www.freeimagehosting.net/uploads/b8fb5421d6.jpg

프로젝트에 양식을 추가하고 Formborderstyle 속성을 없음으로 설정하십시오. 이를 통해 양식을 크기를 조정하고 배치 할 수 있지만 테두리 나 타이틀 바가 없으며 사용자가 이동할 수있는 방법이 없습니다.

그래서 당신은 세 가지를 모두 가짜로 만들어야합니다. 테두리와 제목 막대를 가짜로 만드는 가장 쉬운 방법은 양식 SystemColors.windowFrame의 백색을 만드는 다음 BackColor = SystemColors.HighLight 및 Forecolor = SystemColor.highlightText를 사용하여 SystemColors.WindowFrame을 표시 한 다음 레이블 (그림에 "대화"라고 표시된 위치)을 넣는 것입니다. (그리고 글꼴을 굵게 표시하고) 그런 다음 그림에서 흰색이 보이는 곳에 BackColor = SystemColors.window가있는 패널을 넣으십시오. 라벨과 패널의 위치와 크기를 조정해야하므로 1 픽셀 테두리 (이는 양식의 백콜러 일뿐)가 있습니다.

가짜 타이틀 바에 의해 양식을 드래그 할 수 있도록이 코드를 양식에 추가하십시오 (물론 이벤트를 연결해야합니다).

private bool _Moving = false;
private Point _Offset;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    _Moving = true;
    _Offset = new Point(e.X, e.Y);
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (_Moving)
    {
        Point newlocation = this.Location;
        newlocation.X += e.X - _Offset.X;
        newlocation.Y += e.Y - _Offset.Y;
        this.Location = newlocation;
    }
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
    if (_Moving)
    {
        _Moving = false;
    }
}

또 다른 문제는 실제 타이틀 바가 없기 때문에 사용자가 양식을 닫을 방법이 없다는 것입니다. 확인 (또는 닫기) 버튼을 추가하고 버튼의 클릭 이벤트에 넣어야합니다.

this.DialogResult = DialogResult.OK;

일반적으로 타이틀 바의 마우스 이벤트를 사용하여 드래그를 용이하게하지만 레이블 컨트롤에는 마우스 이벤트가 없습니다. 이 코드를 사용하면 실제로 패널을 차단하고 제목 표시 줄을 잡고 드래그 할 수있는 유일한 장소를 제외하고는 실제로 양식의 어느 곳에서나 드래그 할 수 있습니다.

다른 답변에는 사용자 정의 대화 상자에서 정보를 되 찾는 것에 대한 자세한 내용이 있습니다.

업데이트 : 실제로는 아니오 만 있습니다 분명한 OK 버튼을 추가하지 않고 테두리 형태를 닫는 방법. 양식의 ControlBox 속성을 False로 설정하지 않는 한 오늘 화면의 오른쪽 상단에있는 OK 또는 X 버튼은 실제로 대화 상자가 아니더라도 대화 상자를 닫습니다. 형태.

다른 팁

초고시이지만 [t] Ugly 솔루션을 원한다면 Microsoft.visualBasic에 대한 프로젝트에 참조를 포함시킬 수 있습니다.

string s = Microsoft.VisualBasic.Interaction.InputBox("prompt text",
    "title text", "default value", 0, 0);

대화 상자는 전체 화면을 차지하지만 사용하기가 간단합니다. 그러나 내가 언급했듯이 엄청나게 추악합니다.

기본적으로 사용자가 입력 한 문자열을 반환하는 사용자 정의 대화 상자를 원한다고 가정합니다. 한 가지 방법은 프로젝트에 Microsoft.visualBasic에 대한 참조를 추가하는 것입니다.이 프로젝트는 기본적으로 텍스트 상자가있는 메시지 상자 인 Inputbox 메소드에 액세스 할 수 있습니다. 그러나 그것은 재미가 없으며 어쨌든 스마트 폰에서 작동 할 것이라고 확신하지 않습니다.

직접 굴리기 위해 프로젝트에 양식 (CustomDialog)을 추가하고 TextBox (TextBox1), 레이블 (Label1) 및 버튼 ( "OK")을 드래그하십시오.

레이블 텍스트를 설정하려면 다음과 같은 양식 생성자에 매개 변수를 추가하십시오.

public CustomDialog(string textCaption)
{
    label1.Text = textCaption;
}

입력 된 텍스트를 발신자에게 노출 시키려면이 코드를 양식에 추가하십시오.

public override string Text
{
    get
    {
        return textBox1.Text;
    }
}

OK 버튼의 클릭 이벤트 에서이 코드를 넣습니다.

this.DialogResult = DialogResult.OK; // this will close the form, too

기본 양식 에서이 대화 상자를 사용하려면이 양식의 인스턴스를 작성하고 표시하고 확인 버튼을 클릭 한 다음 텍스트 속성 (사용자가 입력 한 내용을 반환)을 읽으십시오.

using (CustomDialog dialog = new CustomDialog("What is your name"))
{
    if (dialog.ShowDialog(this) == DialogResult.OK)
    {
        string enteredText = dialog.Text;
    }
}

당신은 더 멋진 것을 얻을 수 있지만, 그것들은 기본입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top