2016-11-02 1 views
0

안드로이드에서 토스트와 비슷한 내 윈도우 용 팝업 알림을 만들고자했습니다.Windows Compact Framework 커스텀 팝업 통보

  • 그것은 항상 (활성 상태의 기간 동안)
  • 그것은 그것의 클릭 경우 좋을 텐데 현재 활성 형태
  • 을 차단하지 않겠 위에이어야한다
  • 에서 활성에 대해 신경 안 trough

나는 Microsoft.WindowsCE.Forms.Notification에 대해 알고 있지만 응용 프로그램의 스타일과 잘 어울리지 않지만, Notification을 상속하는 사용자 지정 클래스를 만들려고했지만 스타일을 다시 찾을 수는 없습니다. 나 또한 최상위 폼을 만들려고했는데, 그 중 하나가 작동하지 않았다, 양식 ShowDialog를 사용하지 않는 한 전혀 표시되지 않을 것입니다,하지만 그때 그것은 크기를 화면 크기로 autosized 될 것입니다. 여기는 내가 만드는 것을 계획했다 방법의 샘플입니다 from :

 Form frm = new Form(); 
    frm.TopMost = true; 
    Label lbl = new Label(); 
    lbl.Text = "TEST"; 
    lbl.Parent = frm; 
    frm.Bounds = new Rectangle(15, 15, 150, 150); 
    frm.WindowState = FormWindowState.Normal; 
    frm.FormBorderStyle = FormBorderStyle.None; 
    frm.AutoScaleMode = AutoScaleMode.None; 
    frm.Show(); 

답변

1

Microsoft.WindowsCE.Forms.Notification은 모든 플랫폼에서 지원되지 않습니다. 자신 만의 구현을 고수 할 수도 있습니다. 그리고 그것에 대해, 여기 내가 무엇을 할 것입니까 (테스트되지 않음) :

클래스 라이브러리 프로젝트를 만듭니다. 그런 다음 양식을 추가하십시오.

enter image description here

편집 양식의 속성 :

ControlBox = false 
FormBorderStyle = FixedDialog 
TopMost = true 

폼에 다음 코드를 추가합니다 :

public partial class FormNotification : Form 
{ 
    private Timer timer; 
    public int Duration { get; private set;} 

    public FormNotification(string message, int duration) 
    { 
     InitializeComponent(); 

     this.labelMessage.Text = message; 
     this.Duration = duration; 

     this.timer = new Timer(); 
     this.timer.Interval = 1000; 
     this.timer.Tick += new EventHandler(timer_Tick); 
    } 

    void timer_Tick(object sender, EventArgs e) 
    { 
     if (Duration <= 0) 
      this.Close(); 
     this.Duration--; 
    } 

    private void buttonHide_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 

    private void FormNotification_Load(object sender, EventArgs e) 
    { 
     this.timer.Enabled = true; 
    } 
} 

지금 클래스를 추가 이제 Label 컨트롤과 버튼 아래 컨트롤을 추가 :

public class CNotification 
{ 
    public CNotification() 
    { 

    } 

    public static void Show(Form owner, string message, int duration) 
    { 
     FormNotification formNotification = new FormNotification(message, duration); 
     formNotification.Owner = owner; 
     formNotification.Show(); 
    } 
} 

는 마지막으로 좋아 사용

폼의 컨트롤에 대한 액세스를 제공

  • 을 확장하기위한

    // assuming call from a form 
    CNotification.Show(this, "Hello World", 5); 
    

    아이디어를 업데이트

  • 위치 지정 & 크기
  • 아이콘을 추가하십시오. 통지의
  • 변경 불투명도는이 일을
+0

,하지만 몇 가지 문제가있다하더라도 그 표시는 또한 모든 형태의이 통지가 나타날 때 극대화 초점을 잃어 버릴 때 상단에 체류 그것은 뒤에 현재 양식을 집중 간다 (배터리, wifi 신호 등이있는) 상단 표시 줄이 나타나지 않아야합니다 (클릭 연결이 아니기 때문에 최대화 할 수 없습니다.) – Aleksandar

+0

맞아요, 계속 유지하려면 뭔가를 추가했습니다. 대답.상단 막대의 경우 플랫폼에 따라이 막대를 숨길 수 있습니다. 간단한 Google 검색을 통해 답이 표시됩니다. – raidensan

+0

그래, 난 그 초점을 무시하고 그 때마다 false를 반환하여 해결할 수 : 'public override bool Focused { get { return false; } } ' 어쨌든 나는 당신의 도움 덕분에 내가 원하는 것을 할 수있었습니다. – Aleksandar