Перетащите слова в граф WindowsForms - PullRequest
0 голосов
/ 25 мая 2019

Как я могу сделать графику в C #, когда я использую функцию перетаскивания с типами строк из текстового документа? Идея состоит в том, что я хочу сделать графику, которая представляет длину слов, которые я должен перетащить.

В программе, которую я кодировал, функциональность заключается в перетаскивании чисел и создании графика, который показывает разницу между их значениями.

Например, я хочу перетащить «Book, Pen» на графику, которая уже есть в моих WindowsForms на момент запуска программы, и столбчатая диаграмма отражает первый столбец больше, чем второй. Книга-> 4 буквы; Pen-> 3 буквы

public class Grafic: Control
{
    int[] valori;

    private void Grafic_DragDrop(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(typeof(string)))
        {
            string valoriString =
                (string)e.Data.GetData(typeof(string));
            //MessageBox.Show(valoriString);

            Valori = valoriString
                    .Split(',')
                    .Select(val => int.Parse(val))
                    .ToArray();
        }
    }        

Так что это моя проблема, и мне нужно каким-то образом изменить часть кода, где находится этот int.Parse (val).

Я ожидаю, что изображение принимает строковые типы и отражает то, что я описал.

1 Ответ

0 голосов
/ 25 мая 2019

Вот кое-что, с чего можно начать:

public partial class Grafic : Control
{

    private SortedDictionary<int, int> WordLengthCounts = new SortedDictionary<int, int>();

    public Grafic()
    {
        InitializeComponent();
        this.DragEnter += Grafic_DragEnter;
        this.DragDrop += Grafic_DragDrop;
        this.Paint += Grafic_Paint;
    }

    private void Grafic_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = e.Data.GetDataPresent(typeof(string)) ? DragDropEffects.All : DragDropEffects.None;
    }

    private void Grafic_DragDrop(object sender, DragEventArgs e)
    {
        string input = (string)e.Data.GetData(typeof(string));
        // Regex by TheCodeKing: https://stackoverflow.com/a/7311811/2330053
        var matches = System.Text.RegularExpressions.Regex.Matches(input, @"((\b[^\s]+\b)((?<=\.\w).)?)");
        foreach (var match in matches)
        {
            int wordLength = match.ToString().Length;
            if(!WordLengthCounts.ContainsKey(wordLength))
            {
                WordLengthCounts.Add(wordLength, 1);
            }
            else
            {
                WordLengthCounts[wordLength]++;
            }
        }
        this.Invalidate();
    }

    private void Grafic_Paint(object sender, PaintEventArgs e)
    {
        Graphics G = e.Graphics;
        foreach(var wordLengthCount in WordLengthCounts)
        {
            Console.WriteLine("Length: " + wordLengthCount.Key.ToString() + ", Count: " + wordLengthCount.Value.ToString());

            // ... put in your drawing code to visualize this data ...

        }
    }

}
...