小编Sco*_*ain的帖子

选择一个表单时,使与程序关联的所有表单都出现在前面

我在我的应用程序有两种形式MainFormHexCompare.如果我点击我的应用程序到另一个窗口然后我点击两个表单中的一个,只有其中一个来到前面.如果我单击两个表单中的任何一个表单,它将如何使其成为应用程序中所有打开表单的顶部?现在我需要单独选择每个表单以使它们到我的窗口堆栈的顶部(这可能非常烦人,因为HexCompare已经ShowInTaskbar设置为false

一个很好的例子就是我想要的方式是大多数查找对话框的工作方式.如果单击查找对话框,则如果主窗体被另一个应用程序隐藏,则它会将主窗体带到前面;如果单击主窗体,则如果另一个应用程序隐藏了查找对话框,则它将出现在前面.

如何MainForm调用.

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new MainForm());
}
Run Code Online (Sandbox Code Playgroud)

如何HexCompare调用

private void lstCaputres_SelectedIndexChanged(object sender, EventArgs e)
{
    var selectedItem = (Tuple<DateTime, byte[]>)lstCaputres.SelectedItem;
    if (hexCompare == null || hexCompare.IsDisposed)
    {
        hexCompare = new HexCompare(selectedItem.Item2);
        hexCompare.Show();
    }
    else
        hexCompare.ChangeValue(selectedItem.Item2);
}
Run Code Online (Sandbox Code Playgroud)

编辑:

似乎HexCompare价值ParentNull.如果我能以某种方式设置它来MainForm解决我的问题,如果是这样我该怎么设置它?

EDIT2:

我已经使用Tigran的解决方案对其进行了半解决,但是如果有更好的解决方案我仍然感兴趣,它会导致闪烁,因为每个表单都会被带到前面.

//In MainForm.cs
private void MainForm_Activated(object sender, EventArgs e)
{
    hexCompare.BringToFront();
    this.BringToFront();
}

//in …
Run Code Online (Sandbox Code Playgroud)

.net c# .net-4.0 winforms

4
推荐指数
1
解决办法
859
查看次数

从Directory.GetFiles中排除结果

如果我想调用Directory.GetFiles并让它返回所有匹配模式的文件,*.bin但我想排除所有匹配模式的文件,LOG#.bin其中#是一个不确定长度的运行计数器.有没有办法在传入搜索过滤器的步骤中过滤掉结果,GetFiles或者我必须获取结果数组然后删除我要排除的项目?

.net c#

4
推荐指数
1
解决办法
8465
查看次数

为什么内部构造函数没有什么特别之处呢?

这是这个封闭问题的分离,我有一个答案,但在我回应之前它已经关闭了.以下是该问题的调整版本:

为什么一个类有一个只设置属性的内部构造函数?

public class SomeClass
{
    public SomeClass() : this(new SomeOtherClass()) { }
    internal SomeClass(SomeOtherClass c) { _someField = c; }

    private SomeOtherClass _someField;

    protected void SomeMethod() {
        var foo = _someField.Bar();
    }
}
Run Code Online (Sandbox Code Playgroud)

这有什么好处,你为什么不这样做:

public class SomeClass
{
    public SomeClass() { _someField = new SomeOtherClass(); }

    private SomeOtherClass _someField;

    protected void SomeMethod() {
        var foo = _someField.Bar();
    }
}
Run Code Online (Sandbox Code Playgroud)

c#

4
推荐指数
1
解决办法
129
查看次数

进行隧道事件的正确方法

编辑:我想我问了一些XY问题.我并不真正关心让隧道事件工作,我关心的是从父窗口后面的代码中获取一个事件来获取并通过一个控件来响应,该控件是该窗口的子控件而无需明确需要告诉孩子其父母是谁并手动订阅该事件.


我试图在父控件中引发一个事件,并让子控件监听该事件并对其做出反应.根据我的研究,我认为我只需要做一个RoutedEvent但是我做错了.

这是一个显示我尝试过的MCVE,它是一个带有窗口和UserControl的简单程序.

<Window x:Class="RoutedEventsTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:RoutedEventsTest"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Button Name="button" Click="ButtonBase_OnClick" HorizontalAlignment="Left" 
                VerticalAlignment="Top">Unhandled in parent</Button>
        <local:ChildControl Grid.Row="1"/>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
using System.Windows;

namespace RoutedEventsTest
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            TestEventHandler += MainWindow_TestEventHandler;
        }

        void MainWindow_TestEventHandler(object sender, RoutedEventArgs e)
        {
            button.Content = "Handeled in parent";
            e.Handled = false;
        }

        private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
        {
            RaiseEvent(new RoutedEventArgs(TestEvent));
        }

        public static …
Run Code Online (Sandbox Code Playgroud)

c# wpf event-handling routed-events

4
推荐指数
1
解决办法
2340
查看次数

当我包含System.Collections.Generic时,为什么我不能使用SynchronizedCollection?

我试图在我的C#代码中包含以下行,但由于某种原因,它被标记为错误:

        public SynchronizedCollection<Uri> allImages = new SynchronizedCollection<Uri>();
Run Code Online (Sandbox Code Playgroud)

我试过包括,using System.Collections.Generic但它没有解决问题.知道如何SynchronizedCollection<T>在我的应用程序中工作吗?

.net c#

4
推荐指数
1
解决办法
2437
查看次数

如何解析XSD文件

我正在编写一个代码生成工具,它将接收从Visual Studio的数据集生成器生成的XSD文件,并为每个表中的每个列创建一个自定义类.我已经了解如何实现IVsSingleFileGenerator代码生成以及如何将单个文件生成器转换为多文件生成器.然而,似乎我最麻烦的一步是应该是最简单的一步.我以前从未真正使用过XML或XML-Schema,我也不知道迭代XSD文件并读出列名和类型的正确方法是什么,因此我可以构建我的代码.

有关如何读取XSD文件的教程的任何建议?如何拉也分别任何建议xs:element表示列出来,并阅读其msprop:Generator_UserColumnName,type以及msprop:Generator_ColumnPropNameInTable从每一个元素属性.

c# parsing xsd

3
推荐指数
2
解决办法
2万
查看次数

尽管我宣称它为"更新",Cursor仍然只读它

我正在尝试更新游标内的一行.我要做的是用OLD_QTY和NEW_QTY更新记录链.但是,当我尝试进行更新时,The cursor is READ ONLY即使我包含for update of OLD_QTY, NEW_QTY在我的declration中,也会出现错误.如果我在select语句中包含OLD_QTY和没有区别NEW_QTY.

declare @current_inv_guid uniqueidentifier
declare @last_inv_guid uniqueidentifier
declare @current_vid int
declare @last_vid int
--declare @current_new_qty money
declare @last_new_qty money
--declare @current_old_qty money

declare iaCursor cursor 
      for select INV_GUID, old_VID
          --, OLD_QTY, NEW_QTY  
          from #IA 
          order by INV_GUID, old_vid, ENTRY_NUM 
      for update --of OLD_QTY, NEW_QTY
open iaCursor
Fetch next from iaCursor into @current_inv_guid, @current_vid --, @current_old_qty, @current_new_qty

while @@fetch_status = 0
begin
    --test to see …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

3
推荐指数
3
解决办法
9326
查看次数

我如何更改事件处理程序在继承类中的工作方式?

我正在使用自定义类,并有一个事件处理程序来监视属性,只在特定情况下作出反应.

这是基类的片段:

public class PageView
{
    private UIView activePage;
    public List<UIView> Pages { get; set; }
    public delegate void PageChangedEventHandler(object sender, PageChangedEventArgs e);
    public event PageChangedEventHandler PageChanged;

    public UIView ActivePage
    {
        get { return activePage; }
        set
        {
            if (!activePage.Equals(value))
            {
                activePage = value;
                OnPageChanged();
            }
        }
    }

    protected virtual void OnPageChanged()
    {
        if (PageChanged != null) 
           PageChanged(this, new PageChangedEventArgs(Pages.IndexOf(activePage)));
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在子类中尝试做的事情:

public class LoopingPageView : PageView
{
    protected override void OnPageChanged()
    {
        if (PageChanged != null && 
            Pages.IndexOf(ActivePage) …
Run Code Online (Sandbox Code Playgroud)

c# .net-4.0

3
推荐指数
1
解决办法
133
查看次数

重启时删除非空文件夹

Users从域中删除用户后,我试图删除文件夹中的用户配置文件文件夹.问题是有时系统可能正在使用该文件夹.

问题是使用MOVEFILE_DELAY_UNTIL_REBOOT具有MoveFileEx将只能删除空文件夹.

来自MSDN:

如果dwFlags指定MOVEFILE_DELAY_UNTIL_REBOOTlpNewFileNameNULL,则MoveFileEx 会在系统重新启动时注册要删除的lpExistingFileName文件.如果lpExistingFileName引用目录,则仅当目录为空时,系统才会在重新启动时删除目录.

删除包含正在使用的文件的非空文件夹的正确方法是什么?


这是一个基于Michel答案的简单测试程序,它按预期工作.

internal static class Program
{
    private static void Main(string[] args)
    {
        foreach (var file in Directory.EnumerateFiles(args[0], "*", SearchOption.AllDirectories))
        {
            Console.WriteLine(file);
        }

        foreach (var directory in Directory.EnumerateDirectories(args[0], "*", SearchOption.AllDirectories))
        {
            Console.WriteLine(directory);
            DeleteFileOnReboot(directory);
        }

        DeleteFileOnReboot(args[0]);
    }

    private static void DeleteFileOnReboot(string file)
    {
        bool result = MoveFileEx(file, null, MoveFileFlags.MOVEFILE_DELAY_UNTIL_REBOOT);
        try
        {
            if (!result)
                throw new Win32Exception();
        } …
Run Code Online (Sandbox Code Playgroud)

c# winapi movefileex

3
推荐指数
1
解决办法
1489
查看次数

WCF可以在导线上保持引用相等吗?

假设您有一些定义为

[DataContract]
public class Foo
{
    [DataMember]
    public List<Bar> Bars {get; set;}
}

[DataContract]
public class Bar
{
    [DataMember]
    public string Baz { get; set; }
}

public class Service1 : IService1
{
    public bool Send(Foo foo)
    {
        var bars = foo.Bars;

        bars[0].Baz = "test2";
        return bars[0].Baz == bars[1].Baz;
    }
}

[ServiceContract]
public interface IService1
{
    [OperationContract]
    bool Send(Foo composite);
}
Run Code Online (Sandbox Code Playgroud)

假设我正在使用WCF到WCF,并且在客户端和服务器之间使用共享数据协定DLL,如果执行以下操作

static void Main(string[] args)
{
    using (var client = new ServiceReference.Service1Client())
    {
        var bar = new Bar();
        bar.Baz …
Run Code Online (Sandbox Code Playgroud)

c# wcf reference

3
推荐指数
1
解决办法
376
查看次数