小编Rol*_*and的帖子

Visual Studio显示无穷无尽的消息"财产代码生成'值会员'失败了."

在使用Visual Studio 2008快乐地攻击这个C#应用程序几天后,我被一连串错误对话框显示:

属性" valueMember "的代码生成失败.
错误是:' 对象引用未设置为对象的实例.'

现在,当我在设计器中进行微小的更改时,例如将控件移动几个像素,然后尝试保存,就会发生这种情况.每秒都会出现几个这样的错误对话框,让我忙着取消所有这些,通过敲击Enter键同时尝试让alt-F4让VS关闭.

最终我确实让VS关闭并保存我所做的更改.重新启动VS后,我对整个项目进行"清理",然后"构建",一切正常,应用程序运行良好,没有问题.

直到我在表单设计器中进行了另一个细微的更改.

我不知道valueMember我的应用程序中的任何属性.

这让我很疯狂,这对我的项目来说是一个真正的表现.任何帮助表示赞赏.

c# designer visual-studio

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

C#listbox集合语法

虽然学习C#非常快,但我对这个Collection语法问题感到磕磕绊绊.

我将自己类型MyItem的一些对象添加到listbox lstData.现在我需要在这个列表框中搜索并想到使用优雅的LINQ表示法,如:

lstData.Items.Where(x => x.Text == SearchString)
Run Code Online (Sandbox Code Playgroud)

但是列表框的项目没有.Where(),尽管我确实包含了"using System.Linq;" 命名空间.

所以我尝试过:

foreach (MyItem item in (MyItem)lstData.Items)
Run Code Online (Sandbox Code Playgroud)

但这会产生构建错误:无法将类型'System.Windows.Forms.ListBox.ObjectCollection'转换为'MySandbox.frmListboxDemo.MyItem'.

我确实设法写了一些可行的东西:

        for (int i = 0; i < lstData.Items.Count; i++)
        {
            MyItem item = (MyItem)lstData.Items[i];
            if (item.Text == SearchString)
            {
                lstData.SetSelected(i, true);
                break;
            }
        }
Run Code Online (Sandbox Code Playgroud)

和类似的版本:

        var item_enum = lstData.Items.GetEnumerator();
        while (item_enum.MoveNext()) { etc etc... }
Run Code Online (Sandbox Code Playgroud)

结果证明是2行更长,并且没有找出什么可以取代'var'.

我不太确定我是否理解如何使用Collections,ObjectCollections,Enumerators等,但我很想学习.特别是如果.here()版本是可能的和/或更好的.


谢谢你的所有答案.我最终得到了这个解决方案:

        var item_iter = lstData.Items.Cast<MyItem>()
                          .Where(x => x.Text.Trim().ToLower() == txtItemName.Text);
        foreach (MyItem item in item_iter)
        {
            int i = lstData.Items.IndexOf(item);
            lstData.SetSelected(i, true);
            break;
        } …
Run Code Online (Sandbox Code Playgroud)

c# linq collections ienumerable listbox

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

使用 ScrollViewer.ScrollToEnd() 做 AutoScroll 只在调试时有效,事件处理程序太简单

查看此解决方案以获得更好的自动滚动,我认为自己很聪明地找到了一个更简单的解决方案,但它仅适用于调试会话:

    private void scrollviewer_Messages_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        ScrollViewer sv = sender as ScrollViewer;
        if (sv.VerticalOffset == sv.ScrollableHeight)
        {
            sv.ScrollToEnd();//debug breakpoint
        }
        return;
    }
Run Code Online (Sandbox Code Playgroud)

在此 ScrollViewer 中向文本块添加内容时,自动滚动工作,文本底部保持在视图中。当用户向上滚动并添加更多内容时,底部消失,自动滚动关闭,这很好。当用户滚动回底部时,ScrollToEnd() 应该重新打开自动滚动,但是当添加更多内容时,底部仍然滚动到视图之外。

当我设置断点时,我可以验证确实调用了 ScrollToEnd()。然后,在删除断点并添加更多内容后,自动滚动再次起作用。

我通过按下一个按钮来添加内容,在 ViewModel 和 Binding 中使用代码。所以我确定没有并发问题。添加内容和手动滚动之间有很多时间。

这真的让我感到困惑,而我对简单的自动滚动解决方案感到非常满意。这怎么行不通?


编辑:

我发现在滚动回底部后自动滚动再次起作用,但不知何故,真正到达底部并不那么容易。我需要向下移动滑块,然后单击滚动条的向下箭头。我现在将尝试替换==代码中的符号以允许几个像素差异。


编辑:

这个问题是否是由于内容是带有多行文本字符串和 TextWrap 的 TextBlock 引起的?

    <ScrollViewer Name="scrollviewer_Messages" DockPanel.Dock="Top" 
                  Height="100" Width="200"           
                  ScrollChanged="scrollviewer_Messages_ScrollChanged">
        <TextBlock Name="tb_Message"
               Margin="10" TextWrapping="Wrap"
               Text="{Binding Path=Messages}">
        </TextBlock>
    </ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

编辑:

将事件处理程序中的公式更改为:

 sv.ScrollableHeight - sv.VerticalOffset < 20
Run Code Online (Sandbox Code Playgroud)

我已经尝试过,< 10但是 pushpraj(见下面的答案)让我尝试了更大的数字。仍然不清楚为什么会这样,因为问题不是没有ScrollToEnd()被调用。


关于解决方案:

<20没有必要的,因为它是关于小数。一般来说,两个实数永远不会相等,但这里不是真的。 …

c# debugging wpf scrollview

6
推荐指数
1
解决办法
4776
查看次数

是等号的CSV有效吗?

我刚刚得到一个要处理的CSV输入文件,它在第一个分隔引号之前有一个等号,并想知道这是否有效并且有任何用途.示例(简化):

"2"
"3"
="4"
Run Code Online (Sandbox Code Playgroud)

在阅读了一些像这样的帖子后,我尝试了这样的CSV:

"2"
"3"
="A1+A2"
Run Code Online (Sandbox Code Playgroud)

和:

"2"
"3"
"=A1+A2"
Run Code Online (Sandbox Code Playgroud)

似乎Excel和LibreOffice默默地忽略引号之前的等号,并且很好地将引号后面的等号视为公式的标志.但是,我找不到任何关于此的文档.

(对于Excel,此CSV需要使用.txt扩展名保存,并使用control-O打开)

我倾向于在打开引号之前使用等号来调用CSV作为在阅读此文件时易于处理的错误,但仍然想知道是否还有更多关于此的说法.

csv excel excel-formula

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

如何修复引导程序从 3 升级到 5 造成的布局变化

安全性使我使用 NuGet 将 jQuery 从 3.2.1 升级到 3.6.0,将 bootstrap 从 3.3.7 升级到 5.0.1,并摆脱旧的手动安装的 jQuery/bootstrap 文件,现在我遇到了一些布局问题无法修复。

症状1

这里我有一个可见的按钮“切换导航”。以前,这个按钮是不可见的。我在 css 类上找到的信息sr-only说它应该在屏幕阅读器上不可见(向盲人计算机用户阅读屏幕内容),但我没有屏幕阅读器,而是 firefox/chrome 浏览器。我猜这个类应该只显示给屏幕阅读器。无论如何,这个按钮没有任何作用,所以我把它注释掉了。

<nav>
    <div class="navbar navbar-default">
        <div class="container-fluid">
            <div class="navbar-header">
                <!-- button type="button" class="navbar-toggle collapsed"
                    data-toggle="collapse" data-target="#navbar" 
                    aria-expanded="false" aria-controls="navbar">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button -->
                <a href="/" class="pull-left">
                    <img src="/Images/company_logo.png" />
                </a>
                <span id="span_pagetitle" class="pull-left span_pagetitle" runat="server">
                   Page Title
                </span>
            </div>
Run Code Online (Sandbox Code Playgroud)

仍然奇怪的是,Chrome 开发工具在 Elements、Styles 下显示它sr-only是由 bootstrap.min.css 处理的,但新的 Bootstrap5 由 _reboot.scss 处理。下划线表明这是一个临时文件,其扩展名与更高级别的 CSS …

css nuget twitter-bootstrap

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

如何在不调用Wait()的情况下保持RunAsync()方法在后台运行?

尝试从使用BackgroundWorker升级到Task,我对如何在不调用Wait()的情况下保持后台作业运行感到困惑.

这是后台工作(简化):

    private async Task RunAsync()
    {
        HttpResponseMessage response = await TheHttpClient.GetAsync(Path);
        if (response.IsSuccessStatusCode)
        {
            textBox_Response.Text = await response.Content.ReadAsStringAsync();
        }
    }
Run Code Online (Sandbox Code Playgroud)

单击"发送"按钮时,上面的代码应该运行,但由于后台代码有多个await异步调用,我猜Wait()需要多次调用:

    private void button_Send_Click(object sender, EventArgs e)
    {
        Task t = RunAsync();
        while (!t.IsCompleted)
        {
            t.Wait();
        }
    }
Run Code Online (Sandbox Code Playgroud)

但这会在后台作业的整个处理时间内阻止GUI.

如何启动后台作业并立即从按钮单击处理程序返回,同时允许后台作业运行所有异步调用?

我知道如何使用BackgroundWorker实现这一点,我不应该在这里使用任务吗?

c# task backgroundworker async-await

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

IIS 不侦听其 IP 地址,无法显示此页面

我们之前在 IIS 服务器上配置了多个站点,但现在我们无法让第二个站点工作。IIS 安装在虚拟 Windows 机器上,以太网适配器分配了多个 IP 地址。

IIS 上的第二个站点绑定到这些 IP 地址之一,可以 ping 正常,但无法访问该站点。

我单击了开始,IIS 站点图标缺少指示已停止的黑点。

浏览器说:This page cannot be displayed建议检查IP地址。

随着netstat我发现没有进程监听的新的IP地址,这显然是一个问题。

我们已经尝试过重新启动 IIS,并在创建新的 IP 地址和新的 IIS 站点后重新启动整个虚拟 Windows 机器。

如何让 IIS 开始侦听为其第二个站点分配的 IP 地址?

iis

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

FileInfo.MoveTo 不更新 FileInfo.Exists

我正在移动一些文件,但注意到 FileInfo.Exists 并没有真正起作用。在下面的示例中,将文件从“foo”移动到“bar”后,两个FileInfo对象似乎都是Exist. 在其他运行中,我发现两个 Exists 都是假的。

using System.IO;//File, FileInfo

        public static void TestMoveTo()
        {
            // create file 1
            string FileName = @"d:\temp\foo.txt";
            File.WriteAllText(FileName, "Test file\n");
            FileInfo FI_Test = new FileInfo(FileName);
            // move to file 2
            string NewFileName = @"d:\temp\bar.txt";
            if (File.Exists(NewFileName))
                File.Delete(NewFileName);
            FileInfo FI_New = new FileInfo(NewFileName);
            FI_Test.MoveTo(FI_New.FullName);
            // test
            bool OldExists = FI_Test.Exists;
            bool NewExists = FI_New.Exists;
            // use File.Exists
            bool OldExists2 = File.Exists(FileName);
            bool NewExists2 = File.Exists(NewFileName);
            return;//debug breakpoint
        }
Run Code Online (Sandbox Code Playgroud)

有没有办法访问flush文件系统或update …

c# file

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

如何读取多列ListView控件的列名?

查找ListView列的名称的最佳方法是什么?

我使用我在此论坛上找到的程序将DataTable转换为List,但我无法将Id列放在第一位,特别是因为并非我的所有DataTable都有一列"Id".

我可以在集合listView.Columns.ToString()中搜索,但我看到的格式是:

"ColumnHeader:Text:Id"

我必须解析,找到正确的名称"Id".这看起来不像C#的精神.

我也尝试过:listView.SelectedItems[0].SubItems["Id"] 但是没有编译.


好的这是完整的代码.确切的问题是用户使用Courier Names和Ids在listView中选择一行,但它也可以是Ids和Names.找到所选快递的ID的最快方法是:

ListViewItem si = listCouriers.SelectedItems[0];
CourierId = si.SubItems["Id"].Text;
Run Code Online (Sandbox Code Playgroud)

但这不起作用.硬编码的方式就是这样,但我不能保证有一天会使用错误的列:

ListViewItem si = listCouriers.SelectedItems[0];
CourierId = si.SubItems[1].Text;
Run Code Online (Sandbox Code Playgroud)

使用@HuorSwords方法导致这个不那么简单的解决方案,这对我有用,但取决于合理的假设,即列中的列顺序ColumnHeaderCollection对应于表单上的显示:

ListViewItem si = listCouriers.SelectedItems[0];
string CourierId = null;
int icol = 0;
foreach (ColumnHeader header in listCouriers.Columns)
{
    if (header.Text == "Id")
    {
        CourierId = si.SubItems[icol].Text;
        break;
    }
    icol++;
}
Run Code Online (Sandbox Code Playgroud)

c# listview multiple-columns

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

从具有文档规范的字节数组或字符串加载XML的最佳方法是什么,从OpenDocument ODT文件中获取?

(注意:原始问题标题是:从带有文档规范的字符串加载XML的最佳方法是什么?)

我需要从XmlDocument对象中的ODT opendocument(LibreOffice)文件中获取XML内容.ODT是一个zip存档,我设法将content.xml部分作为字节数组.转换为字符串似乎很简单,但我很惊讶地发现XmlDocument.LoadXml(string)不接受以Xml文档规范行开头的字符串,如:

<?xml version="1.0" encoding="UTF-8"?>
<Offices id="0" enabled="false">
  <office />
</Offices>
Run Code Online (Sandbox Code Playgroud)

例外是: Data at the root level is invalid. Line 1, position 1

我想知道是否有一个库调用来读取这样的字符串?

现在我使用我即兴创作的这个功能,但是在处理xml文档时必须在角色级别上做一些事情是不必要的复杂:

    /// <summary>
    /// Convert an Xml document in a string, including document specification line(s),
    /// to an XmlDocument object
    /// </summary>
    /// <param name="XmlString"></param>
    /// <returns></returns>
    public static XmlDocument LoadXmlString(string XmlString)
    {
        XmlDocument XmlDoc = new XmlDocument();
        XmlDoc.LoadXml(XmlString.Substring(XmlString.LastIndexOf("?>") + 2));
        return XmlDoc;
    }
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

注意:我之前提到过这个问题

但这解决了解析字符串的问题,使用将字符串转换为字节数组的解决方案,而我不应该解析字符串,而不是将字节数组转换为字符串开头,但只是跳过此步骤直接解压缩ODT后解析字节数组.

c# xml xmldocument odt

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

无法安装uv4l raspicam

我在 Raspberry Pi 2 上安装 uv4l raspicam 时遇到问题。我已按照http://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=中的说明多次完成所有操作14、上网查了一遍又一遍,却没有解决办法。

对我来说,保存密钥的第一条指令似乎没问题,尽管我不知道如何验证它。如果我检查 apt-key 列表,我不知道应该有什么..?

当我将该行添加到sources.list并尝试执行apt-get更新后,它说:

无法获取http://www.linux-projects.org/listing/uv4l_repo/raspbian/dists/jessie/main/binary-armhf/Packages 404 Not Found

我尝试将 wheezy 和 jessie 结尾都添加到sources.list中,甚至更新了我的raspbian版本,因为我无法让它工作,但它没有帮助。

无法获取http://www.linux-projects.org/listing/uv4l_repo/raspbian/dists/wheezy/main/binary-armhf/Packages 404 未找到

在尝试更新后,进一步尝试都是徒劳的,因为安装命令也失败了:

E: 无法找到 uv4l 包

E: 无法找到包 uv4l-raspicam

我缺少什么想法吗?

谢谢!

raspberry-pi raspbian

2
推荐指数
1
解决办法
6071
查看次数

保护foreach循环免受null的更聪明的方法

是否有一种更智能的方法来保护foreach循环免受NullReference异常的影响:

if (G_Locatie.OverdrachtFormulierList != null)
{
    foreach (OverdrachtFormulier otherform in G_Locatie.OverdrachtFormulierList)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用了很多foreach循环,经常嵌套,以及很多变量,例如G_Location肯定存在,但是datamember .OverdrachtFormulierList可能还没有被分配列表使用new.


亲爱的朋友们,感谢你们的所有评论.在了解了你的建议之后,虽然很难理解,但在深入了解Lasagna代码后,我开始研究,经过一些实验,我发现最简单最干净的方法是简单地避免使用NULL,正确初始化.虽然我有点不得不在我的代码中初始化OverdrachtFormulierList,但有遗忘一个实例的风险,我找到了适当的初始化位置,即在原始类定义中.

为简单起见,请查看以下代码:

    class MyClass
    {
        public List<string> items = new List<string>();

        public IEnumerator<string> GetEnumerator()
        {
            return items.GetEnumerator();
        }
    }

    class MyComplexClass
    {
        private MyClass _itemlist /*= new MyClass()*/;
        public MyClass itemlist
        {
            get { return _itemlist; }
            set { _itemlist = value; }
        }
    }

    void Sandbox()
    {
        MyClass mc /*= new MyClass()*/;
        foreach (string Sb in mc.items)
        { …
Run Code Online (Sandbox Code Playgroud)

c# foreach null

1
推荐指数
2
解决办法
793
查看次数

MarkupString 无法按预期与 Blazor 中的 String.Format 配合使用

我正在尝试将字符串格式应用于来自资源文件的字符串。

<p class="note">@((MarkupString)(String.Format(Localizer["Test"], 2)))</p>
Run Code Online (Sandbox Code Playgroud)

但这是它在浏览器中的显示方式:

You have done <span class="text-primary text-bold"> 2 </span> tests.
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能让它采取正确的造型?

我已经尝试过这个解决方案,但它说:

The type or namespace name 'HtmlSanitizer' could not be found 
Run Code Online (Sandbox Code Playgroud)

我正在使用 Blazor 服务器和 .NET6

编辑:我有一个名为 App.resx 的文件

<data name="Test" xml:space="preserve">
    <value>
      You have done 
      &amp;lt;span class="text-primary text-bold"&amp;gt; 
        {0}
      &amp;lt;/span&amp;gt;
      tests.
    </value>   
</data>
Run Code Online (Sandbox Code Playgroud)

c# blazor blazor-server-side .net-6.0

0
推荐指数
1
解决办法
521
查看次数