RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-5026

Денис's questions

Martin Hope
Денис
Asked: 2022-09-13 18:29:53 +0000 UTC

C#。获取 SortedList 集合中的类实例属性

  • 0

有一个代码:

public class Program
{
    public static void Main()
    {
        Person p = new Person{ Name = "Best", LastName="User"};
        Person p1 = new Person{ Name = "Best1", LastName="User1"};
        SortedList mySL = new SortedList();
        mySL.Add("2", p);
        mySL.Add("1", p1);

        for(int i =0; i < mySL.Count; i++)
        {
            Console.WriteLine("\t{0}:\t{1}", mySL.GetKey(i), mySL.GetByIndex(i));
        }         
    }
}
    
public class Person
{
    public string Name {get;set;}
    public string LastName {get;set;}
}

这将返回:

1:      ConsoleApp.Person
2:      ConsoleApp.Person

是否可以在排序表中获取属性Name?

c#
  • 0 个回答
  • 0 Views
Martin Hope
Денис
Asked: 2022-08-20 18:28:17 +0000 UTC

ASP.NET 核心 MVC。同一页面上的多个选择

  • 0

假设数据库中有三个表,其中包含 PC、笔记本电脑和机顶盒制造商的名称。

如何在页面上显示 3 个不同的选择列表来显示这些表中的信息?

我的第一个想法是实现一个多态列表,它会在控制器中创建,然后通过 Razor,使用条件,它会在页面的一侧被打破。但是,有些事情告诉我,有一种更优雅的方法可以做到这一点。

c# razor
  • 1 个回答
  • 32 Views
Martin Hope
Денис
Asked: 2022-07-13 19:20:52 +0000 UTC

ASP.NET 核心 MVC。实现 IDataProtectionKeyContext 接口

  • 1

有一个数据上下文:

public class OurDbContext : DbContext, IOurDbContext, IDataProtectionKeyContext
{
    public DbSet<Employee> Employees { get; set; }
    
    public DbSet<Role> Roles { get; set; }
    
    public DbSet<DataProtectionKey> DataProtectionKeys { get; set; } = null!;
}

有一种方法可以实现向数据库发送数据:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateNewClient(Employee client, string TypeOfClient)
{
    var secstring = _protector.Protect(client.Password);

    Employee temp = new Employee
    {
        Name = client.Name,
        Password = secstring,
        RoleId = 1
    };
    await _mediatr.Send(new NewEmployee.NewEmployeeCommand(temp));
    return Redirect("~/");
}

没有任何东西进入数据库。

如果我们从上下文类中删除实现IDataProtectionKeyContext

public DbSet<DataProtectionKey> DataProtectionKeys { get; set; } = null!;

并缩短线路

builder.Services.AddDataProtection().PersistKeysToDbContext<OurDbContext>();

前

builder.Services.AddDataProtection();

然后数据以加密密码进入数据库。但在这种情况下,5 分钟后,尝试读取此密码将由于密钥过期而导致异常。

微软的帮助没有说明这一点:

https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-6.0#persistkeystodbcontext

asp.net-core-mvc entity-framework-core
  • 1 个回答
  • 18 Views
Martin Hope
Денис
Asked: 2022-03-12 18:10:31 +0000 UTC

在 TreeView WPF 中创建层次结构和显示

  • 1

有一个描述产品的类:

using System.Collections.ObjectModel;

namespace Test
{
    public class Product
    {
        public ObservableCollection<Product> productName { get; set; }

        public string nameOfProduct { get; set; }

        public Product()
        {
            productName = new ObservableCollection<Product>();
        }
    }
}

此代码有一个链接:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Test"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TreeView Name="TrvView">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate DataType="{x:Type local:Product}" ItemsSource="{Binding productName}">
                    <TextBlock Text="{Binding nameOfProduct}" />
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
    </Grid>
</Window>

有一段代码以分层形式创建和显示集合的元素:

 private void Create()
    {
        for (int i = 0; i < 10; i++)
        {
            bread = new Product(){nameOfProduct = "Хлеб"};
            for (int j = 0; j < 10; j++)
            {
                breadVarieties = new Product(){nameOfProduct = "Сорт хлеба " + j.ToString()};
                bread.productName.Add(breadVarieties);
            }
            TrvView.Items.Add(bread);
        }
    }

结果,我得到了预期的漂亮结果:

在此处输入图像描述

我想不到的是:我如何以这样的方式实现代码,例如,在每 10 级面包之后,不创建位于上方的下一个根元素,我将数据放在下面。大概是这样的:

在此处输入图像描述

如果我自己预先确定嵌套深度(再写几个 for 循环并添加元素),它对我有用。如何以编程方式执行此操作?

c#
  • 1 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-09-29 14:17:41 +0000 UTC

使用 C# 处理 Telegram API 时的异常

  • 0

Telegram 机器人有一个代码。任务的本质是在接收到特定类型的消息(照片或视频)时,需要执行某种方法。

        static string chatID = "***";
    static string securePART = ":***";
    int update_id = 0;

    TelegramBotClient botClient = new TelegramBotClient(chatID + securePART);

    string primaryUrl = @"https://api.telegram.org/bot*****/";

    WebClient webClient = new WebClient();
    public void GetMessagesUpdate()
    {
        var telegramBot = new TelegramBotClient(chatID + securePART);
        string url = $"{primaryUrl}getUpdates?offset={update_id}";
        var messageUpdate = webClient.DownloadString(url);


        var msgs = JObject.Parse(messageUpdate)["result"].ToArray();

        WriteLine(messageUpdate.ToString());
        foreach (dynamic item in msgs)
        {
            update_id = Convert.ToInt32(item.update_id) + 1;

            string userMessage = item.message.text;
            string userId = item.message.from.id;
            string useFirstrName = item.message.from.first_name;
            string UserLastName = item.message.from.last_name;

            string text = $"{useFirstrName} {UserLastName} {userId} {userMessage}";

            Console.WriteLine(text);

            switch (item.MessageType.Type)
            {
                case MessageType.Photo:
                    {
                        WriteLine("Прислали фото");
                    }
                    break;
                default:
                    {
                        WriteLine("Что-то пошло не так");
                    }
                    break;
            }
        }
    }

Switch语句执行过程中抛出异常:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Не удается выполнить привязки исполняющей среды по нулевой ссылке

简而言之,我根本不明白问题是什么?MessageType 是一个枚举。

c#
  • 2 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-08-22 13:09:22 +0000 UTC

返回 SELECT 命令的结果

  • 0

假设我们有一个包含 First Name、Last Name 和 Age 列的表。我可以通过样式执行命令吗

command.CommandText = "SELECT * FROM TestDB WHERE AGE=25";

返回名称到文本框?

c#
  • 1 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-08-19 13:58:27 +0000 UTC

UWP 连接到 SQL

  • 1

有一个WPF与数据库一起使用的应用程序SQL。BApp.xaml包含到测试数据库的连接字符串。计划将此应用程序拖到UWP. 复制此连接字符串后,我遇到了连接到测试数据库的困难。测试数据库的连接字符串如下所示:

SqlConnection("Data Source=204-1\\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True");

正如我所说,WPF字符串在应用程序中有效。将此连接字符串复制到 时UWP,会出现以下错误:

Exception: Failed to generate SSPI context.
ErrorCode=NoCredentials
   at System.Data.SqlClient.SNI.SNIProxy.GenSspiClientContext(SspiClientContextStatus sspiClientContextStatus, Byte[] receivedBuff, Byte[]& sendBuff, Byte[] serverName)
   at System.Data.SqlClient.SNI.TdsParserStateObjectManaged.GenerateSspiClientContext(Byte[] receivedBuff, UInt32 receivedLength, Byte[]& sendBuff, UInt32& sendLength, Byte[] _sniSpnBuffer)
   at System.Data.SqlClient.TdsParser.SNISSPIData(Byte[] receivedBuff, UInt32 receivedLength, Byte[]& sendBuff, UInt32& sendLength)

此错误发生在以下几行:

  • Data Source=204-1\SQLEXPRESS;Initial Catalog=Test;Integrated Security=SSPI;
  • Data Source=204-1\SQLEXPRESS;Initial Catalog=Test;Integrated Security=SSPI;User Id=DbAdmin;
  • Data Source=204-1\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True

SQL Server在应用程序中应该使用什么字符串来连接UWP?另外,我很高兴知道SQL Server在应用程序中连接WPF和之间的根本区别是什么UWP?

c#
  • 1 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-06-19 13:34:29 +0000 UTC

统一和返回类型

  • 1

今天,我第一次发现了在 Unity 中使用按钮的一个特点——你不能在按钮上放置一个带有返回值的函数。例如:

public int WoodCounter()
{
/* Какой-то код */
   return Wood;
}

此方法在 OnClick() 列表中不可见。只有Void. 你能给我解释一下这种现象的原因吗?

unity3d
  • 1 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-06-07 12:57:43 +0000 UTC

统一3D。数组边界外的索引

  • 0

有一系列游戏对象在对撞机碰撞后被破坏。有一个循环形式的代码,for它遍历数组的每个元素,int如果数组元素等于 ,则将变量加 1 null。进一步在代码中,调用了以下方法,该方法将int变量作为参数传递并在其内部进行比较,如果传递的参数对应于另一个int变量,则我们加载下一级。

问题的症结在于,在运行时,当触发数组元素检查时,Unity会抛出错误Index was outside the bounds of the array。就我而言,我无法理解它与什么有关。完整的脚本代码如下:

    [SerializeField]
    private int sumDeathSitizen, needToEndLvl; // Переменная sumDeathSitizen запоминает, сколько было уничтожено игровых объектов. needToEndLvl указывается внутри редактора Unity. Отвечает за то, сколько должно быть уничтожено игровых объектов
    [SerializeField]
    private GameObject[] Victims; // Массив игровых объектов


    public void died (int d)
    {
        if (d == needToEndLvl)
        {
            loadNextScene();
        }
        else
        {
            Debug.Log("Task not end");
        }
    }

    public void canEndLvl()
    {
        for (int i = 0; i <= needToEndLvl; i++)
        {
            if (Victims[i] == null)
            {
                sumDeathSitizen = sumDeathSitizen + 1;
            }
        }
        Debug.Log("EndSum");
        died(sumDeathSitizen);
    }

    private void loadNextScene()
    {
        int scene = SceneManager.GetActiveScene().buildIndex;
        scene = scene + 1;
        SceneManager.LoadScene(scene, LoadSceneMode.Single);
    }

按计划,当玩家执行或不执行某些动作来破坏游戏对象时,需要靠近门并尝试打开它。当执行开门动作时,首先调用canEndLvl()该方法,如上所述,该方法循环for遍历游戏元素数组。如果所有对象都被销毁,则当前场景结束并加载下一个场景。正如我上面所说,尽管销毁对象的结果得到了正确总结,但 Unity 仍然依赖于(Victims[i] == null)错误的 if 行,Index was outside the bounds of the array并且不会进一步传递该值来比较和加载新的关卡。我究竟做错了什么?

c#
  • 1 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-10-31 17:38:58 +0000 UTC

std::atexit 的实际使用

  • 1

今天了解了函数的存在atexit。阅读它的手册,我不明白使用这个功能有多实用,如果可以通过简单地用十字或代码完成(如果是控制台)关闭窗口来终止程序?

** @gil9red 我在链接中看到了这个例子。但是直到最近,我才明白在什么情况下可以应用这个功能。从 github 上的链接中研究了使用示例后,我开始了解(我自己的感觉)如何使用atexit. 事实证明,当应用程序结束时,无论如何都会调用这个函数。也就是说,确实有可能实现某些东西的序列化而不需要额外的调用main()(毕竟,有时你可以简单地忘记这样做:))。小例子:

#include <iostream>
#include <string>

using namespace std;

void CloseProj()
{
  cout << "Выполнение закончено. Программа закрыта\n";
}

void EnterName()
{
  char name[20];
  int age;

  cout << "Пожалуйста, введите своё имя и возраст:\n"
       << "Имя: ";
  cin >> name;
  cout << "Введите свой возраст: \n"
       << "Возраст: ";
  cin >> age;
  cout << "Привёт, " << name << ". Тебе " << age << " лет!\n";
}

int main()
{
  atexit(CloseProj);
  EnterName();
}
c++
  • 4 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-09-27 17:28:35 +0000 UTC

If 条件的奇怪行为。Unity3d

  • 0

有一个连接到按钮的简单代码。

 public void Inc()
    {
        if (x < 5)
        {
            x++;
            Debug.Log(x);
        }

        Debug.Log("Done");
    }

理论上,我希望在点击按钮五次后,会出现 Done 消息。但是完成,在 X 每增加 1 个单位后出现。 在此处输入图像描述

unity3d
  • 1 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-09-25 17:44:24 +0000 UTC

Unity3D 游戏对象缩放

  • 1

大家好。我想将我的一些游戏开发移植到手机上。从第一分钟开始,我就遇到了以下功能。在 Unity3D 编辑器中,我将相机显示设置为 16:9 纵横比。在编辑器中,对象看起来很好。我希望在电话中看到他们的方式。当我在手机上启动应用程序后,所有物体都分散在各个方向时,我感到很惊讶。

所以,看起来像是电脑上的样本。标注以在中间显示文本,在其中显示文本 在此处输入图像描述

这是在手机上启动之后。 在此处输入图像描述

简而言之,我不太了解如何设置游戏对象,以便在具有不同对角线的设备上,对象相对于屏幕对齐。不仅是我自己绘制和添加的那些,还有 Text 类型的元素。

unity3d
  • 1 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-11-22 14:36:19 +0000 UTC

在 Qt Creator 和 g++ 中编译的区别

  • 0

通常,我在 Qt Creator 环境中编程(目前是 4.4.1)。今天,我决定跳出平时的环境,尝试在Vim中写代码(我已经可以退出vim很长时间了:)),通过控制台构建。但这是我遇到的一个功能,无法弄清楚其中的区别。

如果您在 Qt 中编写以下代码,构建并运行它,一切都会很好:

#include <iostream>

using namespace std;

int main() {
    auto x = 0;
    cin >> x;
    cout << x << endl;
    return 0;
}

如果我们尝试通过以下命令构建相同的代码:g++ -c *.cpp,则会出现错误:

main.cpp:6:10: error: ‘x’ does not name a type
     auto x = 0;
          ^
main.cpp:7:12: error: ‘x’ was not declared in this scope
     cin >> x;
            ^

请向我解释其中的区别。

gcc --version
gcc (SUSE Linux) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
c++
  • 1 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-11-14 19:32:03 +0000 UTC

C ++中的更多随机性[重复]

  • -1
这个问题已经在这里得到了回答:
循环中的 rand 函数 2 个答案
4年前关闭。

假设有一个循环,其含义是一次调用该函数20次srand。由于srand它使用当前时间来生成数字,因此通过以超过一秒的速度执行循环,我在输出中得到 20 个相同的数字。代码示例:

// Example program
#include <iostream>
#include <stdlib.h> //srand
#include <time.h>

using namespace std;

int random_11()
{
     srand(time(NULL)); //Вызываем функцию рандома. Описание функции по ссылке: http://www.cplusplus.com/reference/cstdlib/rand/
    int random_num = rand() % 100; // Генерируем число в пределах 100
    return random_num;
}
int main()
{
    int ar[20];
    int n;

    for (int i = 0; i < 20; i++)
    {
        n = random_11(); // Вызываем функцию для генерации случайного числа
        ar[i] = n;
        cout << ar[i] << '\n';
    }

}

在输出中,我们将获得 20 个在给定秒内生成的相同值。如果我们将 20 的值更改为 200,000,那么我们将在几秒钟内生成几个不同的数字。

问题的实质:如何实现不绑定时间的随机数的生成?

伙计们,我为我的呆滞症和对手册的阅读不佳表示歉意。在 Vladimir Martyanov 的建议下,我将其srand(time(NULL))移至 main。

// Example program
#include <iostream>
#include <stdlib.h> //srand
#include <sys/time.h>

using namespace std;

int random_11()
{
    int random_num = rand() % 100; 
    return random_num;
}
int main()
{
    srand(time(NULL));
    int ar[20];
    int n;

    for (int i = 0; i < 20; i++)
    {
        n = random_11(); 
        ar[i] = n;
        cout << ar[i] << '\n';
    }

}

请理解、原谅并...

c++
  • 2 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-09-04 15:15:36 +0000 UTC

c++中的动态结构

  • 2

我正在完成 Alex Ellaine 书中的任务。在一项测试任务中的指针和链接主题之后,他要求编写一个包含联系人列表的程序。一个先决条件是结构是动态的。我写了代码。但是我在创建动态结构时遇到了问题。我的问题的本质是我无法组织程序的逻辑并且不知道在什么特定时刻最好声明一个动态变量来使用该结构。下面我附上我的代码。通常,代码编译并运行。但是,填写联系人信息并要求他们显示后,只会显示联系人的数量,但字段将完全为空。此外,我在调试模式下运行代码,但仍然无法理解循环中的变量在什么时候“丢失”。 在此处输入图像描述

    #include <iostream>

using namespace std;

//Собственно, сама структура
struct People
{
    string UName;
    string UJob;
    int UPhone;
};

int pins = 0; //В этой переменной хранится информация о том, сколько в сумме имеется записей в книжке
int main() // Точка входа в программу
{
    //Сперва, мы взаимодействуем с пользователем. Спрашиваем у него, что конкретно он хочет сделать
    int action; //Переменная, которая помнит выбор пользователя
    cout << "\nWelcome to Contact app. \n\n" <<
            "1 - Show contact list.\n" <<
            "2 - Add new contact.\n\n" <<
            "Your action: ";
    cin >> action; //Реагируем на действия

    switch (action)
    {
    case 1:
        // Цикл 1. Если количество записей ноль, то пишем уведомление.
        if (pins == 0)
        {
            cout << "Contact list empty...\n";
            main();
        }
        else
            //Если есть записи, то выводим их на экран
        {
            People My_people[pins];
            for (int i = 0; i < pins; i++)
            {
                cout << "Name: " << My_people[i].UName << '\n' <<
                        "Job: " << My_people[i].UJob << '\n' <<
                        "Phone number: " << My_people[i].UPhone << '\n';
            }
            //Конец цикла 1.
        }
        main(); //Выходим в начало программы
        break;

    case 2:
        //Добавляем контакты
        //Объявляем необходимые переменные.
        int NewContact;
        string name;
        string job;
        int PN;

        //Спрашиваем, сколько будет новых контактов
        cout << "How many new contacts do you want to add?\n";
        cin >> NewContact;

        //Заполняем поля в цикле столько раз, сколько указано указано в переменной выше
        for (int i = 0; i < NewContact; i++)
        {
            cout << "Name new contact: \n";
            cin >> name;

            cout << "As whom does " << name << " work?\n";
            cin >>  job;

            cout << name << " phone number: \n";
            cin >> PN;

            pins = pins + 1; //Увеличиваем на 1 количество записей.
        }

        //Добавляем данные в динамическую структуру. Так как неизвестно сколько по факту будет новых пользователей
        People *my_people = new People[NewContact];

        //Копируем по одном введённую выше в структуру.
        for (int i = 0; i < pins; i++)
        {
            my_people[i].UName = name;
            my_people[i].UJob = job;
            my_people[i].UPhone = PN;
        }
        delete[] my_people;
            main(); //Выходим в главное меню

        break;
    }
}

代码结果可以在链接中查看:

http://cpp.sh/8nj6k

当我做这样的事情时,没有任何 Switch 分支(某种轻量级版本),代码工作正常。即使它被驱动到 Do While 循环并执行任意次数。

#include <iostream>

using namespace std;

struct People
{
    string name;
    int health;
};

int main ()
{
    int action;

    cout << "Enter how much new player: \n";
    cin >> action;

    People *my_people = new People[action];

    for (int i = 0; i < action; i++)
    {
        cout << "NAme: \n";
        cin >> my_people[i].name;
        cout << "health int \n";
        cin >> my_people[i].health;
    }

    for (int i = 0; i < action; i++)
    {
        cout << "result: \n";
        cout << my_people[i].name << '\n' <<
                my_people[i].health << '\n';
    }

    delete[] my_people;
    system("pause");
}
c++
  • 2 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-08-24 15:07:17 +0000 UTC

布尔变量数组

  • 2

我想让数组中的一些元素在运行时评估为真。稍后,当用户占用一个单元格时,其值变为 false。例如,我声明了一个 bool 类型的数组,其中包含 3 个在启动时为真的元素。然后提示用户输入数字。如果用户输入 0 然后再次输入 0,他们将被警告。

编码:

#include <iostream>

using namespace std;

int main()
{
    bool myArray[3] = {true};
    int action;
    bool TurnOff = false;

    do
    {
        cout << "Action: ";
        cin >> action;

            if (myArray[action] ==  true)
            {
                cout << "This cell is free\n";
                myArray[action] = false;
            }
            else
            {
                cout << "this cell is busy\n";
            }
    }
    while (TurnOff != true);
    cout << "Done";
}

从理论上讲,我希望如果用户第一次输入 0,则会显示一条消息,表明该单元格是空闲的,如果它已经被占用,则会显示一条单独的消息。问题的本质是,如果你输入 0,然后再输入 0,那么一切都按预期工作。如果输入 1,程序会立即说这样的单元格已被占用。程序输出示例:

Action: 0
This cell is free
Action: 1
this cell is busy
Action: 2
this cell is busy
Action: 4
This cell is free
Action: 5
This cell is free
Action: 6
This cell is free
Action: 7
this cell is busy
Action: 8
This cell is free
Action: 9
This cell is free
Action: 0
this cell is busy
Action: 11
this cell is busy
Action: 12
This cell is free
Action:

为什么程序允许大于 2 的数字?毕竟,我指定数组的大小等于 3。

我意识到我根本不明白布尔数组是如何工作的。如何使大量数组元素在启动时设置为 True (可用)并仅在已使用时才更改为 False ?

c++
  • 2 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-02-07 18:38:56 +0000 UTC

查找 XML 元素并输出它们

  • 0

有一个结构简单的 XML:

<Employee>  
  <people>    
   <Name>Василий</Name>   
   <LastName>Петрович</LastName> 
  </people>
</Employee>

等等十几个条目。

上面有一个 WPF 窗体ListBox。加载表单时ListBox,员工的姓名取自<Name>. 你如何实现如果你ListBox点击名字,然后,比如说,Label他的姓氏将显示在下一个中的任务?

//Загрузка элементов Name и помещение их в ListBox
XElement xElements = XElement.Load(@"Employee.xml");

            foreach (XElement xEle in xElements.Descendants("Name"))
            {
                Listbox_Employee.Items.Add((string)xEle);
            }

是的,目前,这项任务对我来说正好一半。也就是说,如果我启动程序,添加新用户,然后ListBox选择一个新名称,那么他们的姓氏就会显示出来。但是,它会在程序重新启动之前准确显示,因为这些值在运行时存储在 RAM 中。因此,如果在启动程序后添加新名称,则在单击它们后会显示这些名称,但如果我单击上次添加的名称,则什么也不会发生。

我理解理论上,在单击对象后ListBox,应该执行一个方法来打开 XML,执行Container.Descendants 方法并关联这个ListBox特定的姓氏指的是这个对象。
谢谢你的帮助,爱人。
顺便说一下,我正在使用 XElement。

补充1:
在Bulson的推荐下解决问题,我遇到了另一个问题。我创建了一个更简单的 XML 结构:

<MainData>
    <Name>Василий</Name>
    <LastName>Петрович</LastName>
</MainData>

使用 TextBox 和 ListBox 创建了一个简单的 WPF 窗体。接下来,按照建议,我创建了一个单独的类:

[Serializable, XmlRoot("MainData")]
   public class DataExctract
    {
        [XmlAttribute("LastName")]
        public string LastName { get; set; }
    }

接下来,在表格上:

public MainWindow()
        {
            InitializeComponent();
            LoadXml(); //Выполняем метод при загрузке окна
        }
//Этот метод загружает XML и помещает дочерний элемент Name в ListBox
            public void LoadXml()
        {
            try
            {
                XElement xElements = XElement.Load(@"DataXML.xml");

                foreach (XElement xEle in xElements.Descendants("Name"))
                {
                    listBox.Items.Add((string)xEle);
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
//При двойном щелчке по любому элементу помещаем фамилию в TextBox
        private void listBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            try
            {
                StreamReader reader = new StreamReader(@"DataXML.xml");
                XmlSerializer serializer = new XmlSerializer(typeof(List<DataExctract>));
                DataExctract DE = (DataExctract)serializer.Deserialize(reader);
                textBox.Text = DE.LastName;
                reader.Close();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }
    }

结果,我得到一个例外:

There is an error in XML document (1, 2)

当我双击名称时会出现此错误。我在English Stack中找到了2个类似的问题,但我无法理解罪魁祸首(缺乏英语知识)。

c#
  • 1 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-01-25 16:08:15 +0000 UTC

使用 XElement 添加新的子元素

  • 0

例如,我有一个包含 2textbox和 1的常规表格button。按照计划,在输入一些文本并按下按钮后,XML这些值应该被添加到文件中。使用xml形成xml主体,我想通了,没有任何问题。MSDN 对此有全面的参考:

XElement xmlTree1 = new XElement("Root",
    new XElement("Child1", 1),
    new XElement("Child2", 2),
    new XElement("Child3", 3),
    new XElement("Child4", 4),
    new XElement("Child5", 5),
    new XElement("Child6", 6)
);

AddAfterSelf但是我无法从同一本参考书中理解该方法。如何在输入任何值后将它们添加到文档的末尾?让它甚至不是文本框,而是取自的值Console.Readline();

添加:

社区对我投了反对票,但总体上是公平的。因为在给自己答案的时候,我还没有完全理解它是如何工作的:)
当我问这个问题的时候,我并没有停止寻找答案并找到了它。

最初的目标是向 Root 添加一个新的子元素。我认为这是通过方法完成的AddAfterSelf,但在我潜意识的某个地方,我明白这可能是不正确的(这很明显,因为它没有按照我想要的方式工作)。然后我尝试通过简单的添加来添加一个元素,new XElement("Child1", Textbox.text),但这也没有帮助。该文件最终没有更改。但是在坚持不懈地重新阅读 MSDN 和其他程序员的示例之后,我意识到了我的错误。
也就是说,我没有遵循幕后存在的一些明显的要点,这些要点对于那些有更多经验的人来说是 2x2 清楚的。
事实上,首先我必须加载我要使用的文件:var EventLibrary = XElement.Load("EventFile.xml");
之后,我必须调用方法XContainer. Add带有根的名称,以便将来 XContainer 知道什么是 Root 以及什么是子元素。好吧,那就把工作的结果保存到一个文件中吧。
之后,我的 XML 文档开始按照我想要的方式填充。

c#
  • 2 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-01-15 16:24:54 +0000 UTC

VS2015 中的委托和表单元素。理论

  • 1

下午好。我正在阅读 Paul Deitel 的 The Complete Guide to C#, 2006。与代表一起到达部分。读完这一章后,有那么一刻我以为我理解了这个主题,因为我能够实现一个简单的代码,最多可以数到 10:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace consoledemo
{
    public delegate void TopMessage(string message); //объявление делегата. Делегат - это тип данных по ссылке.

    class Program
    {

        static void Main(string[] args)
        {
            TopMessage method = Show; // Тут объявлена ссылка на метод с совпадающей сигнатурой (Show)

            ShowMessage(10, method); //method передаётся сюда вторым параметром
        }

        static void ShowMessage(int second, TopMessage method)//TopMessage передаёт ссылку на метод совпадающей сигнатурой. method является переменной, в которой хранится ссылка
        {
            for (int i  = 0; i < second; i++)
            {
                Thread.Sleep(1000);
                method(string.Format("How long before closing the console: " + i)); //method транслирует свои сообщения в другой метод
            }
        }

        static void Show (string message) // данный метод имеет сигнатуру точно такую же, как объявлено в делегате (TopMessage)
        {
           Console.WriteLine(message);
        }

    }
}

但由于 Deitel 在他的书中演示了控制台中的大部分示例,因此我决定稍微复杂化我的任务。我正在添加一个按钮和一个标签。通过按下按钮,一条消息应该已经广播到How long before closing the console:标签,之后标签应该变得不可见。如果标签消失的问题完全可以解决,那么显示消息的实现对我来说就是一个问题。如果Main我在方法中添加:label1.Text = method.ToString();那么我会得到一个窗口冻结 10 秒(因为我没有将这个案例带到一个单独的线程),完成后,标签将显示文本Win32Demo.TopMessage。我能做的最多就是包括 class MessageBox.Show。
我如何获得Show将其消息转换为属性的方法Button1.text,Label1.text等等。
谢谢你的回复,爱人。

c#
  • 1 个回答
  • 10 Views
Martin Hope
Денис
Asked: 2020-01-12 15:29:32 +0000 UTC

循环框图。理论

  • 1

我在远处循环测试,根据问题的情况,我必须编写一个实用程序,只有下面的流程图:

在此处输入图像描述

第三块和第五块称为条件的上限和下限。此外,该课程还提供了此框图的描述。但她也让我困惑:

在此处输入图像描述

但是如果这个流程图意味着一个“if”条件,那么“if”就有自己的表示法,就像“while”、“do while”等。我没有通过与此流程图相关的所有问题。谢谢你的回复,爱人。Akina,即使我在 C# 中实现了最简单的循环,例如:

static int SumDoWhile()
{
    //
    // Sum numbers 0 .. 4
    //
    int sum = 0;
    int i = 0;
    do
    {
    sum += i;
    i++;
    } while (i < 5);
    return sum;
}

然后它的框图将如下所示:

在此处输入图像描述

cassini,我对你的理解正确吗,第一个流程图的绘制可以描述如下:

public delegate void TopMessage(string message);
    class Program
    {

       static void Main(string[] args)
        {
            int a = 0;
            int b = 1;
            do
            {
                b = b + a;
                a++;
            }
            while (a < 5);
            Console.WriteLine(a);
            Console.ReadLine();
        }

这会是对的吗? 在此处输入图像描述

циклы
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5