Solved

How to compare textbox to a string ?

Posted on 2004-10-14
26
444 Views
Last Modified: 2010-04-15
Hello Experts;

I'm a java programmer trieng to teach my self C# I'am just having a problem comparing a
textbox to a string. I've created a form w/ codes but I dont have any reference on how to
compare a textbox to a string.

I'am hoping someone could help me. I've done a password login before in java maybe
someone can convert this to C# because this is what I need.

// Method to compare username and password.

  private void login()
  {
  try {

  String pass1 = "Username";
  String pass2 = "Password";
  String pass3 = new String(i2.getPassword());

// Here we are comparing the strings pass1 & pass2
// to a 2 textboxes which is i1 &i2.

  if ( pass1.equals( i1.getText() ) ) {
  if ( pass2.equals( pass3 ) ) {  

// In here if its true we display another form.

  Splash time = new Splash();
  dispose();
  }

  else {

  JOptionPane.showMessageDialog(null,"Incorrect Password . . .",
  "Warning . . .",JOptionPane.WARNING_MESSAGE);
  tryme1++;

// After 3 wrong tries we exit the program

  if( tryme1 >= 3 )
  {
  JOptionPane.showMessageDialog(null,"Your not a valid user . . .",
  "Error . . .",JOptionPane.ERROR_MESSAGE);
  System.exit(0);
  }
  }
  }
  }

So as you can see I just want to know how to do this in C# to compare strings
on textboxes to make a perfect login screen, mine was database driven but
I'm just studying this for C# purposes. Pls, help me convert the above codes
to C#, I appriciate every help.

Regards : Rajah
0
Comment
Question by:rajah_mohammed
  • 11
  • 8
  • 4
26 Comments
 
LVL 7

Expert Comment

by:God_Ares
ID: 12316602
well the code for trying 3 times,.. will be as simple as


if (textbox1.Text == "secret")
{
   MessageBox.Show("eh that is it!");
}

also look at the msdn help which should be inculuded with vs.net. (by using f1)

now for the rest of the code,.. one sec
0
 
LVL 7

Expert Comment

by:God_Ares
ID: 12316657
here you go,.. some case errors mabe there,.. but i'm just typing from the head,..

private void login()
  {
  try {

string pass1 = "Username";
  string pass2 = "Password";
//droped pass3,.. see few comments further

// Here we are comparing the strings pass1 & pass2
// to a 2 textboxes which is i1 &i2.
//asuming i1 is a textbox
  if ( pass1 == i1.Text) {
//i2 is the password right?,.. and it needs * ? set i2.PasswordChar
  if ( pass2 == i2.Text) ) {  

// In here if its true we display another form.

  Splash time = new Splash(); // your stuff??
//  dispose(); //dispose what?
  }

  else {

MessageBox.Show("error!!"); //you can add params,.. see help

  tryme1++;

// After 3 wrong tries we exit the program

  if( tryme1 >= 3 )
  {
MessageBox.Show("error you hackert");
 
  Close(); //might be enough,.. this is a form close,.. Application.Exit(); could be used 2
   }
  }
  }
  }


//links

password char : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformstextboxclasspasswordchartopic.asp
0
 

Author Comment

by:rajah_mohammed
ID: 12316998
Okey thanks for that, at least I know how to compare textbox to a string.
One final thing my 3 trial error did not work, I tried your sample but
did not work.

Can you help w/ that here's my codes :

void Button1Click(object sender, System.EventArgs e)
{
 string pass1 = "Username";
 string pass2 = "Password";
 
 if(pass1 == textBox1.Text) {                          
  if(pass2 == textBox2.Text) {
                              
  this.Dispose();
  }                          
 }       
      
 else {            
              
  MessageBox.Show("Sorry, wrong username & password !", "Error . . .",
  MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
  }
 }
            
void Button2Click(object sender, System.EventArgs e)
{
 this.Dispose();
}            
0
 
LVL 7

Expert Comment

by:God_Ares
ID: 12317118
well i assumed it was part of your code,.. and you initialized "tryme1" as a private int tryme1 =0; somewhere in your class...


still why are you doing this.Dispose();?

private int tryme1 = 0; //init the retry to zero

void Button1Click(object sender, System.EventArgs e)
{
 string pass1 = "Username";
 string pass2 = "Password";
 
 if(pass1 == textBox1.Text) {                      
  if(pass2 == textBox2.Text) {
  MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
                       
  this.Dispose(); //why???
  }                      
 }      
     
 else {          
           
tryme1++;
if (tryme1==3)
{
 //message you are a haxor and stuff
Close(); //or Application.Exit();
} else
{
  MessageBox.Show("Sorry, wrong username & password !", "Error . . .",
}
   }
 }
0
 
LVL 7

Expert Comment

by:God_Ares
ID: 12317323
here's a complete sample:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication5
{
      /// <summary>
      /// Summary description for Form1.
      /// </summary>
      public class Form1 : System.Windows.Forms.Form
      {
            private System.Windows.Forms.TextBox textBox1;
            private System.Windows.Forms.TextBox textBox2;
            private System.Windows.Forms.Button button1;
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.Container components = null;

            public Form1()
            {
                  //
                  // Required for Windows Form Designer support
                  //
                  InitializeComponent();

                  //
                  // TODO: Add any constructor code after InitializeComponent call
                  //
            }

            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            protected override void Dispose( bool disposing )
            {
                  if( disposing )
                  {
                        if (components != null)
                        {
                              components.Dispose();
                        }
                  }
                  base.Dispose( disposing );
            }

            #region Windows Form Designer generated code
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                  this.textBox1 = new System.Windows.Forms.TextBox();
                  this.textBox2 = new System.Windows.Forms.TextBox();
                  this.button1 = new System.Windows.Forms.Button();
                  this.SuspendLayout();
                  //
                  // textBox1
                  //
                  this.textBox1.Location = new System.Drawing.Point(16, 56);
                  this.textBox1.Name = "textBox1";
                  this.textBox1.TabIndex = 0;
                  this.textBox1.Text = "textBox1";
                  //
                  // textBox2
                  //
                  this.textBox2.Location = new System.Drawing.Point(16, 88);
                  this.textBox2.Name = "textBox2";
                  this.textBox2.TabIndex = 1;
                  this.textBox2.Text = "textBox2";
                  //
                  // button1
                  //
                  this.button1.Location = new System.Drawing.Point(16, 120);
                  this.button1.Name = "button1";
                  this.button1.Size = new System.Drawing.Size(144, 88);
                  this.button1.TabIndex = 2;
                  this.button1.Text = "button1";
                  this.button1.Click += new System.EventHandler(this.button1_Click);
                  //
                  // Form1
                  //
                  this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                  this.ClientSize = new System.Drawing.Size(408, 366);
                  this.Controls.Add(this.button1);
                  this.Controls.Add(this.textBox2);
                  this.Controls.Add(this.textBox1);
                  this.Name = "Form1";
                  this.Text = "Form1";
                  this.ResumeLayout(false);

            }
            #endregion

            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                  Application.Run(new Form1());
            }

            private int HackCount=0;

            private void button1_Click(object sender, System.EventArgs e)
            {
                  if ((textBox1.Text=="Secret")&&(textBox1.Text=="4444"))
                  {
                        MessageBox.Show("k");
                  }
                  else
                  {
                        HackCount++;
                        if (HackCount>2)
                        {
                              MessageBox.Show("no way man,... you'r out of here");
                              Close();
                              //Application.Exit();
                        }
                        else
                        {
                              MessageBox.Show("try agoin");
                        }
                  }
            
            
            }
      }
}
0
 

Author Comment

by:rajah_mohammed
ID: 12326892
Okey thanks I'm satisfied. I just wanna answer your question regarding :

> this.Dispose();

I'm using that to close my current open mdi child window, fast and easy.
Okey one final thing though I'll add more points if you can answer this.

I would like to open another mdi window and close this current password
window how would I do that ?

     private void button1_Click(object sender, System.EventArgs e)
          {
               if ((textBox1.Text=="Secret")&&(textBox1.Text=="4444"))
               {
                    // I wanna show another mdi window here, if its correct.
               }
               else
               {
                    HackCount++;
                    if (HackCount>2)
                    {
                         MessageBox.Show("no way man,... you'r out of here");
                         Close();
                         //Application.Exit();
                    }
                    else
                    {
                         MessageBox.Show("try agoin");
                    }
               }      
          }
0
 
LVL 7

Expert Comment

by:God_Ares
ID: 12336916
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication5
{
      /// <summary>
      /// Summary description for Form1.
      /// </summary>
      public class Form1 : System.Windows.Forms.Form
      {
            private System.Windows.Forms.TextBox textBox1;
            private System.Windows.Forms.TextBox textBox2;
            private System.Windows.Forms.Button button1;
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.Container components = null;

            public Form1()
            {
                  //
                  // Required for Windows Form Designer support
                  //
                  InitializeComponent();

                  //
                  // TODO: Add any constructor code after InitializeComponent call
                  //
            }

            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            protected override void Dispose( bool disposing )
            {
                  if( disposing )
                  {
                        if (components != null)
                        {
                              components.Dispose();
                        }
                  }
                  base.Dispose( disposing );
            }

            #region Windows Form Designer generated code
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                  this.textBox1 = new System.Windows.Forms.TextBox();
                  this.textBox2 = new System.Windows.Forms.TextBox();
                  this.button1 = new System.Windows.Forms.Button();
                  this.SuspendLayout();
                  //
                  // textBox1
                  //
                  this.textBox1.Location = new System.Drawing.Point(16, 56);
                  this.textBox1.Name = "textBox1";
                  this.textBox1.TabIndex = 0;
                  this.textBox1.Text = "textBox1";
                  //
                  // textBox2
                  //
                  this.textBox2.Location = new System.Drawing.Point(16, 88);
                  this.textBox2.Name = "textBox2";
                  this.textBox2.TabIndex = 1;
                  this.textBox2.Text = "textBox2";
                  //
                  // button1
                  //
                  this.button1.Location = new System.Drawing.Point(16, 120);
                  this.button1.Name = "button1";
                  this.button1.Size = new System.Drawing.Size(144, 88);
                  this.button1.TabIndex = 2;
                  this.button1.Text = "button1";
                  this.button1.Click += new System.EventHandler(this.button1_Click);
                  //
                  // Form1
                  //
                  this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                  this.ClientSize = new System.Drawing.Size(448, 238);
                  this.Controls.Add(this.button1);
                  this.Controls.Add(this.textBox2);
                  this.Controls.Add(this.textBox1);
                  this.Name = "Form1";
                  this.Text = "Form1";
                  this.ResumeLayout(false);

            }
            #endregion



            private int HackCount=0;

            private void button1_Click(object sender, System.EventArgs e)
            {
                  if ((textBox1.Text=="Secret")&&(textBox2.Text=="4444"))
                  {
                        DialogResult = DialogResult.OK; //ok
                        Close();
                  }
                  else
                  {
                        HackCount++;
                        if (HackCount>2)
                        {
                              MessageBox.Show("no way man,... you'r out of here");
                              
                              DialogResult = DialogResult.Cancel;
                              Close();
                              
                        }
                        else
                        {
                              MessageBox.Show("try agoin");
                        }
                  }
            
            
            }
      }

      public class Form2 : System.Windows.Forms.Form
      {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.Container components = null;

            public Form2()
            {
                  //
                  // Required for Windows Form Designer support
                  //
                  InitializeComponent();

                  //
                  // TODO: Add any constructor code after InitializeComponent call
                  //
            }

            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            protected override void Dispose( bool disposing )
            {
                  if( disposing )
                  {
                        if(components != null)
                        {
                              components.Dispose();
                        }
                  }
                  base.Dispose( disposing );
            }

            #region Windows Form Designer generated code
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                  this.components = new System.ComponentModel.Container();
                  this.Size = new System.Drawing.Size(300,300);
                  this.Text = "Form2";
            }
            #endregion
      }

      public class app : ApplicationContext
      {
            Form1 f;
            Form2 f2;


            

            public app()
            {
                  f = new Form1();
                  f2 = new Form2();
                  f.Closed+=new EventHandler(f_Closing);
                  f2.Closed+=new EventHandler(f2_Closed);
                  f.Show();
                  


                  
            }

            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                  Application.Run(new app());
            }

            private void f_Closing(object sender, EventArgs e)
            {
                  if (f.DialogResult==DialogResult.OK)
                  {
                        f2.Show();
                  }
                  else
                  {                        
                        ExitThread();
                  }

            }

            private void f2_Closed(object sender, EventArgs e)
            {
                  ExitThread();
            }
      }


}
0
 

Author Comment

by:rajah_mohammed
ID: 12337252
Sorry but I'm having a hardtime understanding it, here's what I wanna do :

          void Button1Click(object sender, System.EventArgs e)
            {
                    if((pass1 == textBox1.Text) && (pass2 == textBox2.Text)) {
                              
                  this.Dispose();

                        // but how do I tell this frame to be the child of the parent ?
                        NextFrame x = new NextFrame();
                        x.Show();
                  }       

Hope thats much understandable. Thanks again man.
0
 
LVL 7

Expert Comment

by:God_Ares
ID: 12337309
With my latest example I’ve went around, to a imo (in my opinion) neater solution. It starts a process that first shows the login screen. If the logon is successful (DialogResult.Ok) it launches screen 2.


In your latest post your doing:

If login = ok?
{
destroy this object
show other screen.
}
{
tell try again
}


the this.dispose throws away all objects, imo it’s a bad idea to call any dispose’s or Gc.Run(). Those are only for the Garbage Collector,..

an alternative would be,..  to change this.Dispose() to this.Hide().


does this solve it?
0
 

Author Comment

by:rajah_mohammed
ID: 12342330
I dont mind using this.Dispose() or this.Hide(). I just wanna tell my frame to be the child of the parent.
How do I tell my frame to be a child of the parent window ?

 NextFrame x = new NextFrame();
 x.Show();

That is the way I show the next frame but I dont know to tell it to be the child, the syntax that I want is after
the login screen like :

void Button1Click(object sender, System.EventArgs e)
          {
               if((pass1 == textBox1.Text) && (pass2 == textBox2.Text)) {
                         
               this.Dispose();

               // but how do I tell this frame to be the child of the parent ?
               NextFrame x = new NextFrame();
               x.Show();
               }      
          }

I think this is now more understandable !.
0
 
LVL 3

Expert Comment

by:Realmrat
ID: 12344750
Instead of using MDI windows, I think you'd want to use a Dialog.

- Start your Main Form (Parent)
- Prompt for User Information (child Dialog)
- If Authenticated, show next child Dialog

Use seprate forms for each.


Some code from the parent:

        private void Parent_Load(object sender, System.EventArgs e)
        {
            DialogResult result = DisplayAuthDialog();
           
            switch(result)
            {
                case DialogResult.OK:
                {
                    this.AuthenicatedLabel.Text = "True";
                    result = DisplayNextForm();
                    break;
                }
                default:
                {
                    Application.Exit();
                    break;
                }
            }
            NextFormLabel.Text = result.ToString();
        }

        DialogResult DisplayAuthDialog()
        {
            this.Hide();
            Authenticate dlg = new Authenticate();
            dlg.ShowDialog(this);
            return dlg.DialogResult;
        }
        DialogResult DisplayNextForm()
        {
            NextForm dlg = new NextForm();
            dlg.ShowDialog(this);
            return dlg.DialogResult;
        }

From Authenticate Form:

        // Use this to validate that information is entered, and set a friendly error message
        private void UserNameTextBox_Validating(object sender, CancelEventArgs e)
        {
            string toolTip = toolTip1.GetToolTip((Control)sender);
            if( ((TextBox)sender).Text.Length == 0)
            {
                errorProvider1.SetError((Control)sender, toolTip);
                e.Cancel = true;
            }
            else
            {
                errorProvider1.SetError((Control)sender, null);
            }
        }

        private void okButton_Click(object sender, System.EventArgs e)
        {

            if ((UserNameTextBox.Text=="Secret")&&(PasswordTextBox.Text=="4444"))
            {
                this.DialogResult = DialogResult.OK;
            }
            else
            {
                DialogResult result = MessageBox.Show("Invalid User Name or Password.  Press \"Retry\" to try again, or cancel to Exit the program.", "Informitive Message", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                if(result == DialogResult.Cancel)
                {
                    this.DialogResult = DialogResult.Abort;
                }
            }
        }

        private void cancelButton_Click(object sender, System.EventArgs e)
        {
            DialogResult result = MessageBox.Show("You must supply credentials to continue.  Press \"Retry\" to try again, or cancel to Exit the program.", "Informitive Message", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
            if(result == DialogResult.Cancel)
            {
                this.DialogResult = DialogResult.Cancel;
            }
        }

Then I just put a simple "OK" button on the last form:

        private void okButton_Click(object sender, System.EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
        }


You can download the source here:
http://www.xamlcoder.com/Downloads/ParentChildDialogTest.zip

 - Joe
0
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 
LVL 3

Expert Comment

by:Realmrat
ID: 12344963
Whoops, I forgot about the "3 tries you're out".  You can easily just add a label to the form, and change the "okButton_Click" event of the Authenticate form to such:


        private void okButton_Click(object sender, System.EventArgs e)
        {

            if ((UserNameTextBox.Text=="Secret")&&(PasswordTextBox.Text=="4444"))
            {
                this.DialogResult = DialogResult.OK;
            }
            else
            {
                LoginTries++;
                if(LoginTries >= 3)
                {
                    MessageBox.Show("Access Denied: Unable to Authenticate User, program exiting.", "Access Denied", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.DialogResult = DialogResult.Cancel;
                    return;
                }
                TriesLabel.Text = LoginTries.ToString();
                DialogResult result = MessageBox.Show("Invalid User Name or Password.  Press \"Retry\" to try again, or cancel to Exit the program.", "Informitive Message", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                if(result == DialogResult.Cancel)
                {
                    this.DialogResult = DialogResult.Abort;
                }
            }
        }


Sorry about that.  =]

 - Joe
0
 
LVL 7

Expert Comment

by:God_Ares
ID: 12345064
rajah_mohammed

Ok,. getting confused here,.. you want mdi.. ok,.. so i presume you have a mdi-cointainer form? A form where the property isMdiContainer is set to true.

Now the password screen is a child of this mdi-cointainer form right? and you want to the pass form to add a new child?

Asuming NextFrame inhertits form system.windows.forms.form

NextFrame x = new NextFrame();

x.MdiParent = this.MdiParent; //this.mdiparent is set (or should have) when the pass form has been created..



is this it?
0
 

Author Comment

by:rajah_mohammed
ID: 12355930
Thanks for all your comments, I appriciate all of your ideas but I need to solve this simple
problem. I have a 1 parent mdi window and 3 child mdi window. What I wanna do is when
the username and password is correct I will dispose the 1st child and then display the 2
child, is that hard to understand ?

Joe  > Your ideas are okey but I have to get this question finish.

Ares > Yes I have done what you want but when I do this :

NextFrame x = new NextFrame();
x.MdiParent = this.MdiParent;
x.Show();

This will never show the next mdi child because that is declaring that you want the current
child to be the parent ? " I just wanna show the next child window after the password child ".

Hope you understand it I'm increasing the points.
Regards : Rajah
0
 
LVL 7

Expert Comment

by:God_Ares
ID: 12358316
0
 

Author Comment

by:rajah_mohammed
ID: 12390559
Thats site is down I cant download anything.
0
 
LVL 7

Expert Comment

by:God_Ares
ID: 12394870
yeah middle in a domain transfer,.. hold on
0
 
LVL 3

Expert Comment

by:Realmrat
ID: 12396262

    void NewChild_Click(object sender, EventArgs e)
    {
      // Create and show new MDI child
      Form child = new ChildForm();
      child.Text = "MDI Child";
      // Handle the child form closing Event
      child.Closed += new EventHandler(ChildClosed);
      child.MdiParent = this; // Not this.MdiParent;
      child.Show();
    }

void ChildClosed(object sender, EventArgs e)
{
      // Show which child closed - do other closing work here.   Probably want to impliment your own custom EventArgs.
      Form oldForm = (Form) sender;
      MessageBox.Show(oldForm.Text);
}

That works.

 - Joe
0
 

Author Comment

by:rajah_mohammed
ID: 12427578
> Realmrat;

That was good but not nearly what I want, you said :

    void NewChild_Click(object sender, EventArgs e)
    {
      // Create and show new MDI child
      Form child = new ChildForm();
      child.Text = "MDI Child";
      // Handle the child form closing Event
      child.Closed += new EventHandler(ChildClosed);
      child.MdiParent = this; // Not this.MdiParent;
      child.Show();
    }

What if the owner here is a child, how would you tell the next frame that you want
him to be the child of the main form ?
0
 
LVL 7

Accepted Solution

by:
God_Ares earned 100 total points
ID: 12431678
something like this?

code has not been  compiled

Form p = this.MdiParent; //not shure if it's form you want but i think so,...
while( p.MdiParent !=null)
{
  p = p.mdiparent;
}
child.MdiParent = p;
0
 
LVL 3

Expert Comment

by:Realmrat
ID: 12438517
Okay I think we have a language barrier here; please post your entire program tree.  This is What I think you're saying:

 - Create Main Form X
 - Open Child MDI Form Y
 - From Child MDI Form  Y Open Next Child MDI Form Z

Is this what you are saying?

 - Joe
0
 

Author Comment

by:rajah_mohammed
ID: 12450269
> Is this what you are saying?

YES, YOU GOT IT.
0
 
LVL 7

Expert Comment

by:God_Ares
ID: 12460977
so what about my sample?
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applications…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now