Programım hakkında acil yardım (Mdi form)

ProFCJ
25-11-2012, 22:53   |  #1  
OP Üye
Teşekkür Sayısı: 1
78 mesaj
Kayıt Tarihi:Kayıt: Şub 2010

Herkese merhaba,

C# ile bir projeye başladım kendimi geliştirmek için. Mdi form kullanıyorum. Main formda MenüStrip ekledim burada menüler var. Ben bu menülerde "Pencereler" altında "Sınav Ekle" menü elemanına basıldığında Sınav Ekle formu "Child Form" olarak geliyor. Benim yapmak istediğim bu "Sınav Ekle" menü elemanına basıldığında eğer Sınav ekle formu açık değilse açsın. Açık ise de ekrana "Zaten sınav ekleme formunda işlem yapmaktasınız" mesajı versin. Bu konuda yardımınıza ihtiyacım var ne denediysem yapamadım bir türlü. Nasıl kontrol etmeliyim "if" ile yapmam gerek sanırım ama nasıl kontrol ettiririm bu formun açık olup olmadığını.

Şimdiden teşekkürler.

Kapalı Hesap (153535)
26-11-2012, 02:49   |  #2  
Kapalı Hesap
Teşekkür Sayısı: 27
2,297 mesaj
Kayıt Tarihi:Kayıt: Eki 2009

Merhaba aynı sorun yapmış olduğum bu linkteki : https://www.chip.com.tr/forum/vis ... ogrami_t234009.html programda da vardı.Ben öyle bir şey yapılamaz diye düşünmüştüm ama çözümü varmış : http://www.mertbozkurt.com.tr/?p=9

Örnek kod(linkte verdiğim Ajanda programındaki):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ajanda2
{
public partial class AnaForm : Form
{
public AnaForm()
{
InitializeComponent();
}

private void adresKayıtToolStripMenuItem_Click(object sender, EventArgs e)
{
AdresDefteri adres = new AdresDefteri();
AcikKontrol(adres);
/*adres.MdiParent = this;
adres.WindowState = FormWindowState.Maximized;
adres.Show();*/

}

private void adresDefteriToolStripMenuItem_Click(object sender, EventArgs e)
{
AdresBilgileri adres2 = new AdresBilgileri();
AcikKontrol(adres2);
/*adres2.MdiParent = this;
adres2.WindowState = FormWindowState.Maximized;
adres2.Show();*/
}

private void mailGönderToolStripMenuItem_Click(object sender, EventArgs e)
{
MailGonder mail = new MailGonder();
AcikKontrol(mail);
/*mail.MdiParent = this;
mail.WindowState = FormWindowState.Maximized;
mail.Show();*/
}

private void randevuAlToolStripMenuItem_Click(object sender, EventArgs e)
{
RandevuAl randevu = new RandevuAl();
AcikKontrol(randevu);
/*randevu.MdiParent = this;
randevu.WindowState = FormWindowState.Maximized;
randevu.Show();*/

}

private void önemliGünlerToolStripMenuItem_Click(object sender, EventArgs e)
{
OnemliGunler onemli = new OnemliGunler();
AcikKontrol(onemli);
/*onemli.MdiParent = this;
onemli.WindowState = FormWindowState.Maximized;
onemli.Show();*/
}


public void AcikKontrol(Form kontrol)
{
bool durum = false;
foreach (Form mvu in this.MdiChildren)
{
if (mvu.Text == kontrol.Text)
{
durum = true;
MessageBox.Show(mvu.Text +  "Formu zaten Açık Durumda !", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
mvu.Close();
durum = false;
}
}

if (durum == false)
{
kontrol.MdiParent = this;
kontrol.WindowState = FormWindowState.Maximized;
kontrol.Show();
}
}
}
}

İyi ki bu konuyu açtınız sayenizde bunu da öğrenmiş oldum.


Kolay gelsin.

Son Düzenleme: Kapalı Hesap (167893) ~ 26 Kasım 2012 03:28
Kapalı Hesap (167893) bu faydalı yanıtı için aşağıdaki 1 kişiden teşekkür aldı... [ Göster ]
ProFCJ
27-11-2012, 18:25   |  #3  
OP Üye
Teşekkür Sayısı: 1
78 mesaj
Kayıt Tarihi:Kayıt: Şub 2010

Hocam söylediğini denedim şöyle bir problem oldu.Hem formu açıyor hem ekrana form açık diye mesaj veriyor. Onaylayıp tekrar formu açmaya çalıştığında bu sefer işlem katlanıyor 2 kere oluyor. Tekrar denersen yine katlanıp bu sefer 4 tane form açıyor. Kodlarım aşşağıda hata nerede bir yardım edebilirsen sevinirim.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace sinav_bildir
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
private void menuCikis_Click(object sender, EventArgs e)
{
this.Close();
}
private void menuToolBar_Click(object sender, EventArgs e)
{
toolStrip1.Visible = menuToolBar.Checked;
}
private void menuDurum_Click(object sender, EventArgs e)
{
statusStrip1.Visible = menuDurum.Checked;
}
private void menuSinavEkle_Click(object sender, EventArgs e)
{
SinavEkle SinavEkle = new SinavEkle();
SinavEkle.MdiParent = this;
SinavEkle.Show();
AcikKontrol(SinavEkle);
}
private void PencereleriSiralaMenu_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.Cascade);
}
private void YatayDöseMenu_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileHorizontal);
}
private void DikeyDöseMenu_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileVertical);
}
void AcikKontrol(Form kontrol)
{
bool durum = false;
foreach (Form mvu in this.MdiChildren)
{
if (mvu.Text == kontrol.Text)
{
durum = true;
mvu.Activate();
MessageBox.Show(mvu.Text + " Formu Açık Durumda !", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
if (durum == false)
{
kontrol.MdiParent = this;
kontrol.Show();
}
}
}
}

hobbit1421
25-03-2013, 13:24   |  #4  
Yeni Üye
Teşekkür Sayısı: 0
35 mesaj
Kayıt Tarihi:Kayıt: Mar 2013

Merhaba,

iki adet form var benim senaryoda.Biri ana from olan form1,

diğeride sizin sadece bir kez göstermek istediğiniz sınavekleformu olan FormYeni.

kod basit olsun diye ben form1 e bir buton ekledim onun click olayından sınavekle formunu çağırdım.

Koda geçersek :

Form1.cs kodları:

//formYeni nin açık penceresine erişmek için kullanılan static değişken 

public static FormYeni sinavEkleFormu;

private void Form1_Load(object sender, EventArgs e)

        {    

//form1 mdi form olmalı

this.IsMdiContainer = true;

        }

//buton a tıklanınca sınav ekle formu açılıyor...

private void button1_Click(object sender, EventArgs e){

if (sinavEkleFormu == null){               

FormYeni yeni = newFormYeni();

//bu form form1 in child ı olsun

                yeni.MdiParent =this;            

sinavEkleFormu = yeni;


//sınavekleformu artık null değil

//tekrar menüden form çağrıldığında sınavekleformu null olmadığından aşağıdaki else bloğu çalışır.

                yeni.Show();

            }           

else

MessageBox.Show("Sınav ekle formu zaten açık...");

        }

//Tek sorun FormYeni (sınavekle formu) kapatıldığında static sınavekleformu tekrar null olmalı ki

//menüden erişim sağlayabilelim

FormYeni kodu:

//formYeni nin formclosing olayında bizim static sınavekleformu değişkenine null atadık..

//sınavekleformu değişkenini static yapmamızın sebebide formYeni den de bu değişkene erişim sağlamaktı..

private void FormYeni_FormClosing(object sender, FormClosingEventArgs e){         

Form1.sinavEkleFormu = null;

        }

İyi çalışmalar...

Son Düzenleme: hobbit1421 ~ 25 Mart 2013 13:27