问题描述
大家好,
我创建了一个消息框,其中显示了一个位置弹出窗口。表单名称是mymessagebox。它以主要形式被调用。首先显示弹出窗口时,点击消息框上的OK按钮后,MessageBox将关闭并在Web浏览器中打开Google Map。
现在我添加了另一个名为关闭的按钮。并将那个ok buton重命名为Map。现在当我点击Map时,应该在浏览器中打开Map。当我点击关闭它应该关闭该循环并进入下一个循环。
我的源代码是: -
MyMessageBox: -
Hi all,
I have created a message box, Which shows a Popup of a Location. The form name is "mymessagebox". and it was called in the main form. At first when a popup is shown, after clicking on OK button on the messagebox the MessageBox gets closed and Opens a Google Map in the web browser.
Now i have added another button named "close". and rename that ok buton to "Map". Now when i click on Map the Map should be opened in the browser. And when i click on close it should close that loop and go to the next loop.
My source code is:-
MyMessageBox:-
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
namespace LocationFinder
{
public partial class MyMessageBox : Form
{
static MyMessageBox newMessageBox;
static string Button_id;
public MyMessageBox()
{
InitializeComponent();
}
public static string ShowBox(string txtMessage)
{
newMessageBox = new MyMessageBox();
newMessageBox.lblMessage.Text = txtMessage;
newMessageBox.ShowDialog();
return Button_id;
}
public static string ShowBox(string txtMessage, string txtTitle)
{
newMessageBox = new MyMessageBox();
newMessageBox.lblTitle.Text = txtTitle;
newMessageBox.lblMessage.Text = txtMessage;
newMessageBox.ShowDialog();
return Button_id;
}
private void MyMessageBox_Load(object sender, EventArgs e)
{
}
private void MyMessageBox_Paint(object sender, PaintEventArgs e)
{
Graphics mGraphics = e.Graphics;
Pen pen1 = new Pen(Color.FromArgb(96, 155, 173), 1);
Rectangle Area1 = new Rectangle(0, 0, this.Width - 1, this.Height - 1);
LinearGradientBrush LGB = new LinearGradientBrush(Area1, Color.FromArgb(192, 0, 0), Color.FromArgb(245, 251, 251), LinearGradientMode.Vertical);
mGraphics.FillRectangle(LGB, Area1);
mGraphics.DrawRectangle(pen1, Area1);
}
private void button1_Click(object sender, EventArgs e)
{
Button_id = "1";
newMessageBox.Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
Button_id = "2";
newMessageBox.Dispose();
}
}
}
主表格: -
Main Form:-
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;
using System.Data.SqlClient;
namespace LocationFinder
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
public void MainForm_Load(object sender, EventArgs e)
{
string old_value = "";
while (true)
{
String connectionString = null;
SqlConnection conn;
SqlCommand cmd;
String sql = null;
SqlDataReader reader;
connectionString = "server=(local);database=modelDb;user id=sa;pwd=Esi123456";
sql = "DECLARE @var varchar(1000) = (SELECT TOP 1 Text FROM Alarms WHERE AlarmDefinitionId=139 ORDER BY EventTime DESC) DECLARE @start_position int, @end_position int SELECT @start_position = PATINDEX('% at%', @var) SELECT @end_position = PATINDEX('%kilometers%', @var) DECLARE @VALUE VARCHAR(10) = (Select SUBSTRING(@var, @end_position-9,8)) Select Top 1 @VALUE,RouteTable.Latitude,Routetable.Longitude,Alarms.ApplicationTime,RouteTable.StationName,RouteTable.SectionName FROM Alarms INNER JOIN Routetable ON Routetable.Location BETWEEN FLOOR(@VALUE) AND CEILING(@VALUE) WHERE AlarmDefinitionId=139 ORDER BY EventTime DESC";
conn = new SqlConnection(connectionString);
try
{
conn.Open();
cmd = new SqlCommand(sql, conn);
reader = cmd.ExecuteReader();
while (reader.Read())
{
if (old_value.ToString() != reader.GetValue(0).ToString())
{
MyMessageBox.ShowBox("Leak Location:-" + " " + reader.GetValue(0) + Environment.NewLine + "Latitude:-" + " " + reader.GetValue(1) + Environment.NewLine + "Longitude:-" + " " + reader.GetValue(2) + Environment.NewLine + "Leak Occured Time:-" + " " + reader.GetValue(3) + Environment.NewLine + "Station Name:-" + " " + reader.GetValue(4) + Environment.NewLine + "Section Name:-" + " " + reader.GetValue(5));
string lati = reader.GetValue(1).ToString();
string longi = reader.GetValue(2).ToString();
string url1 = "https://www.google.co.in/maps/place/";
string url = url1 + lati + "," + longi;
System.Diagnostics.Process.Start(url);
}
else
{
}
old_value = reader.GetValue(0).ToString();
}
reader.Close();
cmd.Dispose();
conn.Close();
}
catch (Exception ex)
{
MyMessageBox.ShowBox(ex.ToString());
}
System.Threading.Thread.Sleep(5 * 1000);
}
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
About_LocationFinder formhelp = new About_LeakLocationFinder();
formhelp.Show();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
推荐答案
private void button1_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Ok;
}
private void button2_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
public static DialogResult ShowBox(string txtMessage)
{
using(newMessageBox = new MyMessageBox())
{
newMessageBox.lblMessage.Text = txtMessage;
return newMessageBox.ShowDialog();
}
}
public static DialogResult ShowBox(string txtMessage, string txtTitle)
{
using(newMessageBox = new MyMessageBox())
{
newMessageBox.lblTitle.Text = txtTitle;
newMessageBox.lblMessage.Text = txtMessage;
return newMessageBox.ShowDialog();
}
}
在主表单中加载方法写下这样的内容。
In your main form load method write something like this.
if(MyMessageBox.ShowBox(...) == DialogResult.Ok)
{
// Open Map
}
else
{
// Close window
}
private Enum MessageBoxButtons {
Undefined = 0
Map = 1
Close = 2
}
您调用MyMessageBox的行中的
.ShowBox(在循环外定义clickedButtonId):
in the line you call MyMessageBox.ShowBox (define clickedButtonId outside of the loop):
clickedButtonId = MyMessageBox.ShowBox("your message");
if (clickedButtonId == MessageBoxButtons.Close)
{ // do something: skip to next iteration
continue;
}
else if (clickedbuttonId == MessageBoxButtons.Map) {
// do something else: show map
string lati = reader.GetValue(1).ToString();
string longi = reader.GetValue(2).ToString();
string url1 = "https://www.google.co.in/maps/place/";
string url = url1 + lati + "," + longi;
System.Diagnostics.Process.Start(url);
}
}
这篇关于如何将两个按钮保存到c#Windows窗体应用程序中创建的消息框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!