我的C#应用程序中用两个窗体(Form1与Form2),Form1与Form2之间是平等关系(不是父窗体与子窗体的关系),如何将Form1总在Form2之前(而不是将Form1的TopMost属性设为true,将Form1最前端显示),且打开其他程序的界面时,新打开的界面在Form1和Form2之前显示(也就是说让Form1与Form2紧贴在一起),而不是将新打开的其他程序界面在Form1和Form2之间显示。
这种情况如何控制,是不是需要自己写代码啊?如果需要写代码,从哪开始着手呢?
这种情况如何控制,是不是需要自己写代码啊?如果需要写代码,从哪开始着手呢?
① 取得或者修改当前单元格的内容
② 设定单元格只读
③ 不显示最下面的新行
④ 判断新增行
⑤ 行的用户删除操作的自定义
⑥ 行、列的隐藏和删除
⑦ 禁止列或者行的Resize
⑧ 列宽和行高以及列头的高度和行头的宽度的自动调整
⑨ 冻结列或行
⑩ 列顺序的调整
⑪ 行头列头的单元格
⑫ 剪切板的操作
⑬ 单元格的ToolTip的设置
⑭ 右键菜单(ContextMenuStrip)的设置
⑮ 单元格的边框、 网格线样式的设定
⑯ 单元格表示值的设定
⑰ 用户输入时,单元格输入值的设定
⑱ 设定新加行的默认值
http://blog.csdn.net/tangcx/archive/2007/09/12/1782297.aspx#A1
f1.Show();
我的C#应用程序中用到两个窗体(Form1与Form2),Form1与Form2之间是平等关系(不是父窗体与子窗体的关系),在Form1上设置一个按钮,当点击该按钮时new窗体Form2,并调用Form2.Show()将Form2显示,如何将Form2总在Form1之前(而不是将Form2的TopMost属性设为true,将Form2最前端显示),且打开其他程序的界面时,新打开的界面在Form1和Form2之前显示(也就是说让Form1与Form2紧贴在一起),而不是将新打开的其他程序界面在Form1和Form2之间显示。
这种情况如何控制,是不是需要自己写代码啊?如果需要写代码,从哪开始着手呢?
------------------------------------------------------------------------------------
你不是说不是父窗体和子窗体的关系吗 ?
我是这样写的,在一个窗体中通过两个按钮分别打开两个窗体:
Form2_1_ f21;
Form1 f1;
private void button1_Click(object sender, EventArgs e)
{
f21 = new Form2_1_();
f21.Show();
f21.Owner =f1;
}
private void button2_Click(object sender, EventArgs e)
{
f1 = new Form1();
f1.Show();
f1.Owner =f21;
}
我这儿没有问题,看看你是不是这个意思
protected override void OnDoubleClick(EventArgs e)
{
base.OnDoubleClick(e); Form2 f = new Form2();
f.Show(this);//这里和AddOwnerdForm是一样的,两个窗体不是父子窗体,但确会关联在一起
}
--------------------------------------------------------------------------------
打开Form2 的按钮在Form1 上,那不是用showDialog()打开Form2就行了嘛
其实我想做到的是:在Form1上设置一个按钮,当点击该按钮时new窗体Form2,并调用Form2.Show()将Form2显示;此时Form2在Form1前,在打开其他程序界面时,使其他程序界面出现在屏幕最前端,而不是出现在Form1与Form2之间!
其实我想做到的是:在Form1上设置一个按钮,当点击该按钮时new窗体Form2,并调用Form2.Show()将Form2显示;此时Form2在Form1前,在打开其他程序界面时,使其他程序界面出现在屏幕最前端,而不是出现在Form1与Form2之间!
------------------------------------------------------------------------------------------
按钮事件中:
Form2 f2=new Form2();
f2.ShowDialog();
可是还没有完全解决该问题:
其实我想做到的是:在Form1上设置一个按钮,当点击该按钮时new窗体Form2,并调用Form2.Show()将Form2显示;此时Form2在Form1前,在打开其他程序界面时,使其他程序界面出现在屏幕最前端,而不是出现在Form1与Form2之间!
重点是在打开其他程序界面时,使其他程序界面出现在屏幕最前端,而不是出现在Form1与Form2之间!
可是ShowDialog()方法是将窗体显示为有模式对话框,也就是说该打开窗体必须关闭或隐藏,才能继续使用应用程序的其余部分。而我现在想要的是在打开Form2的同时,操作Form1的其它部分,因此,我觉得只能用Form.Show()方法去实现。
也就是说在用Form.Show()显示窗体的前提下,实现“在Form1上设置一个按钮,当点击该按钮时new窗体Form2,并调用Form2.Show()将Form2显示;此时Form2在Form1前,在打开其他程序界面时,使其他程序界面出现在屏幕最前端,而不是出现在Form1与Form2之间”的功能!
using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;namespace WorkFlowNew.UIimage
{
public class ScanToolWinAPI
{
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
private static extern IntPtr GetForegroundWindow(); private delegate void SetThreadTest();
private Thread Th;
private IntPtr MainInt;
private Form TForm;
public ScanToolWinAPI(IntPtr MainIntPrt,Form ToolForm)
{
MainInt=MainIntPrt;
TForm=ToolForm;
}
public void Star()
{
SetThreadTest delega =new SetThreadTest(SetForm);
Th=new Thread(new ThreadStart(delega));
Th.Start();
}
/// <summary>
/// 方法(用于委托)更改前后位置
/// </summary>
private void SetForm()
{
while(true) //死循环 除非ABORT
{
if(MainInt==GetForegroundWindow())
{
TForm.TopMost=true;
}
else
{
TForm.TopMost=false;
}
Thread.Sleep(1);
}
}
/// <summary>
/// 关闭线程
/// </summary>
public void Close()
{
if(Th.IsAlive==true)Th.Abort();
}
}
}private WorkFlowNew.UIimage.ScanToolWinAPI SelectToolFrom;
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
SelectToolFrom.Close(); //在关闭前 要关闭线程
base.Dispose( disposing );
}
private void LoadFrom()
{
From2 from2=new From2;
SelectToolFrom=new ScanToolWinAPI(this.Handle,from2); //启动线程类开始检查窗体是否是活动窗体
}看看能行不