2010-08-09 10 views
6

मैं वर्तमान में एक छोटी परियोजना पर काम कर रहा हूं और इसमें कुछ मदद चाहूंगा।बाहर निकलने के आवेदन के बिना बंद फॉर्म

मेरे पास 2 रूप हैं, पहला लॉगिन विंडो है और दूसरा मुख्य कार्यक्रम होगा। मेरी समस्या यह है कि जब मैं form1this.Close() के साथ बंद करता हूं तो यह पूरे कार्यक्रम से बाहर निकल रहा है।

मुझे एहसास है कि मुझे थ्रेडिंग या ऐसा कुछ उपयोग करने की आवश्यकता है, लेकिन मुझे हल करने के लिए मेरी समस्या का सही संसाधन नहीं मिल रहा है।

धन्यवाद।

+2

मदद है यह Winforms या wpf? और यह थ्रेडिंग का मुद्दा नहीं है, बल्कि यह "इस" के दायरे में एक मुद्दा है जिसका आप इसका उपयोग कर रहे हैं। कोड मदद करेगा। –

+0

संभावित डुप्लिकेट [एक फॉर्म बंद करना और फिर किसी अन्य को कॉल करें।] (Http://stackoverflow.com/questions/2751076/closing-a-form-and-then-call-another-one) –

+0

मैंने नहीं किया है Winforms के साथ बहुत कुछ, लेकिन सिर्फ सत्यापित करने के लिए, आप मुख्य विंडो के साथ अपनी लॉगिन स्क्रीन बना रहे हैं क्योंकि यह माता-पिता है, नहीं? –

उत्तर

6

आप बजाय इसे बंद करने का पहला रूप छिपाने सकता है:

this.Hide(); 
Form2 form2 = new Form2(); 
form2.Show(); 
+1

तब मुझे एक और समस्या है, जब मैं फॉर्म 2 बंद करता हूं, तो मैं छुपा फॉर्म 1 बंद करना चाहता हूं, मैं यह कैसे कर सकता हूं? –

+0

@ विक्टर: वैसे ही, लेकिन आपको वास्तव में दोनों रूपों को बंद करने और ऐप को बंद करने का एक तरीका प्रदान करने की आवश्यकता होगी। –

+0

@Victor: Application.Exit() को चाल –

2

आप WPF का उपयोग कर रहे हैं, तो आप अपने दूसरे "मुख्य" खिड़की के Application.MainWindow सेट कर सकते हैं, अपनी प्रवेश फार्म बंद करने से पहले।

+0

एक और तरीका डब्ल्यूपीएफ अधिक लचीला है ... –

+0

वास्तव में vb.net में आप एप्लिकेशन शटडाउन मोड निर्दिष्ट कर सकते हैं। सी # आपको आसानी से कहने की अनुमति नहीं देता है। http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/61b817f8-d7d3-44de-9095-91a6e3f2150c – ioWint

3

क्या आप अपना प्रोग्राम.cs नहीं बदल सकते हैं ताकि यह मुख्य रूप चला सके, और मुख्य रूप के लॉन्च में यह लॉगिन फॉर्म बनाता है और दिखाता है और फिर खुद को छुपाता है (लॉगिन करने के लिए लॉगिन होने का इंतजार)?

+1

बिल्कुल मैं क्या कह रहा था: सुनिश्चित करें कि आप पहले फॉर्म का उपयोग नहीं कर रहे हैं इस तरह के आवेदन को लोड करने के लिए ... आवेदन। रुन (नया फॉर्म 1()); – MilkyWayJoe

1

Program.cs वह जगह है जहां आपका मुख्य कार्य है। यदि आपने विजुअल स्टूडियो के साथ एक विंडोज ऐप के रूप में प्रोजेक्ट बनाया है तो मुख्य में एक फ़ंक्शन होगा जो प्रोग्राम शुरू करते समय खुलने वाले फॉर्म को चलाता है। मुख्य रूप से लॉगिन फॉर्म से लॉगिन जानकारी प्राप्त करें और फिर दूसरी विंडो को कॉल करें।

[STAThread] 
private static void Main(string[] args) 
{ 
    //there's some other code here that initializes the program 

    //Starts the first form (login form) 
    Application.Run(new form1()); 

    //Get the login info here somehow. Maybe save in public members of form1 or 
    // in a global utilities or global user class of some kind 

    //Run the main program 
    Application.Run(new mainProgramForm()); 
} 

संपादित करें: यहाँ एक उदाहरण है कुछ

मुझे लगता है कि आप पहली बार यह दृष्टांत करना होगा यदि आप लॉगिन रूप से सदस्यों को मिलता है उल्लेख करना भूल गया भूल गया। यह एक अच्छा तकनीक नहीं है, और मैं इस पर वैश्विक उपयोगकर्ता वर्ग विचार करने की सलाह देते हैं, लेकिन मैं एक प्रोग्राम है जो इस विधि की आवश्यकता है, और के बाद से मैं यह उल्लेख किया है, यहाँ उदाहरण है:

private static void Main(string[] args) 
{ 
    //there's some other code here that initializes the program 

    //Instead of running a new form here, first create it and then run it 
    Form1 form1 = new Form1(); //Creates the form 
    Application.Run(form1);  //Runs the form. Program.cs will continue after the form closes 

    //Get the login info 
    string username = form1.Username; 
    string password = form1.Password; 

    //Get rid of form1 if you choose 
    form1.Dispose(); 

    //Validate the user info 

    //Run the main program 
    Application.Run(new mainProgramForm()); 
} 
0

ओपन कार्यक्रम। सीएस - आप अपनी लॉगिन जानकारी दिखाने सहित एप्लिकेशन चलाने के लिए कॉल करने से काफी पहले कर सकते हैं। यहां मेरी परियोजनाओं में से एक का नमूना है। यह डेटाबेस कनेक्शन खोजने की कोशिश करता है। यदि यह नहीं हो सकता है, तो यह एक विज़ार्ड खोलता है और या तो एक्सेस या mssql से कनेक्ट होता है। यदि खुला अच्छा है तो यह एक स्पलश स्क्रीन दिखाता है और आखिरकार एप्लिकेशन चलाता है, अन्यथा यह बंद हो जाता है।

Application.EnableVisualStyles(); 
Application.SetCompatibleTextRenderingDefault(false); 
DialogResult LclResult; 

EESDatabasePersistentData LclPersist; 
LclPersist = new EESDatabasePersistentData(); 
string LclDataType; 
string LclDatabase; 
string LclServer; 
string Password; 
string UserID; 
if (!LclPersist.GetConnection(out LclServer, out LclDatabase, out LclDataType, out UserID, out Password)) 
{ 
     // Run the connection wizard 
     GetConnection(out LclServer, out LclDatabase, out LclDataType, out UserID, out Password); 
} 


if (LclDataType == "ACCESS") 
     InitDataAccess(LclDatabase); 
else if (LclDataType == "SQLSERVER") 
     InitDataSQL(LclServer, LclDatabase, UserID, Password); 
if (OpenGood) 
{ 
     if (!System.Diagnostics.Debugger.IsAttached) 
     { 
       FormSplash.Instance.SetupVersion(); 
       /////////////////////////////////// 
       // If we don't call do events 
       // splash delays loading. 
       Application.DoEvents(); 
       FormSplash.Instance.Show(); 
     } 
     Application.DoEvents(); 

     Application.Run(new FormMentorMain()); 
} 
else 
     Application.Exit(); 
0

अपनी राय है कि

tray Icon

इसके बुलाया ट्रे आइकन की तरह कुछ बनाने के लिए क्या

तो उपयोगकर्ता close all forms कर सकते हैं और app still running ,, और user can go back to app any time

कोडिंग शुरू कर सकते हैं (ध्यान दें कि यह डब्ल्यूपीएफ एप्लीकेशन है)

private NotifyIcon m_notifyIcon; 
private ContextMenuStrip m_contextMenu; 
private bool _ForceClose; 

public MainWindow() 
{ 
    InitializeComponent(); 
    CreateNotifyIcon(); 

} 

private void CreateNotifyIcon() 
{ 
    m_contextMenu = new ContextMenuStrip(); 

    ToolStripMenuItem mI1 = new ToolStripMenuItem { Text = "Open" }; 
    mI1.Click += (sender, args) => Maximize(); 
    ToolStripMenuItem mI2 = new ToolStripMenuItem { Text = "Exit" }; 
    mI2.Click += (sender, args) => EndApplication(); 
    m_contextMenu.Items.Add(mI1); 
    m_contextMenu.Items.Add(mI2); 
    //Initalize Notify Icon 
    m_notifyIcon = new NotifyIcon 
    { 
     Text = "Application Title", 
     Icon = new Icon("Icon.ico"), 
     //Associate the contextmenustrip with notify icon 
     ContextMenuStrip = m_contextMenu, 
     Visible = true 
    }; 
} 

और हम इन कार्यों

protected void Minimize() 
{ 
    Hide(); 
} 

protected void Maximize() 
{ 
    Show(); 
    this.WindowState =WindowState.Normal; 
} 

protected void EndApplication() 
{ 
    Minimize(); 
    Thread.Sleep(1000); 
    _ForceClose = true; 
    WindowState = WindowState.Normal; 
    this.Close(); 
    Environment.Exit(0); 
} 

और Window Closing घटना श्रोता में (मत भूलना इसे जोड़ने के लिए)

private void Window_Closing(object sender, CancelEventArgs e) 
{ 
    if (_ForceClose == false) 
    { 
     e.Cancel = true; 
     Minimize(); 
    } 
} 

यह है कि है, आशा है कि यह आप

संबंधित मुद्दे