Попытка сделать текстовое поле с простым кусочком кода, но не уверен, почему это дает ошибку - PullRequest
0 голосов
/ 19 ноября 2018
public partial class MainWindow : Window
{
    private Rectangle player = new Rectangle();
    private int x=0;
    private int y = 0;
    private System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();    

    public MainWindow()
    {
        InitializeComponent();
        player.Width = 50;
        player.Height = 50;
        player.Fill = Brushes.Red;
        player.MouseEnter += Player_MouseEnter;
        player.MouseLeave += Player_MouseLeave;
        player.MouseDown += Player_MouseDown;
        myCanvas.Children.Add(player);
    }

    private void Player_MouseDown(object sender, MouseButtonEventArgs e)
    {
        Random rand = new Random(); //Creates the pseudo-random movement
        int a = rand.Next(1, 1001); //With variables a and b
        int b = rand.Next(1, 1001);

        Canvas.SetLeft(player, a);
        Canvas.SetTop(player, b);
    }

    private void Player_MouseLeave(object sender, MouseEventArgs e)
    {
        player.Fill = Brushes.Red;
    }

    private void Player_MouseEnter(object sender, MouseEventArgs e)
    {
        player.Fill = Brushes.Blue;
    }

    public void drawPlayer()//makes it easier to redraw after every click
    {
        Canvas.SetLeft(player, x);
        Canvas.SetTop(player, y);
    }
    private void makeTextBox(//needs something here?)
    {
        TextBox.Text = "POINTS Counter";//Using this later on
    }

}

Этот код текстового поля, который я предполагаю, нуждается в чем-то в makeTextBox (), чтобы это имело смысл.Однако я не могу понять, что, как я новичок в wpf и c # в целом.Код просто создает квадрат, который меняет цвет, если кто-то наводит на него курсор.Затем он перемещает псевдослучайную величину по осям x и y (между 1 и 1000).Теперь я хочу добавить систему таймера и очков, но не могу создать текстовое поле.

Я получаю сообщение об ошибке

CS0120 C # Ссылка на объект требуется для нестатическое поле, метод или свойство 'TextBox.Text'

Если бы кто-нибудь мог помочь, это было бы здорово!

1 Ответ

0 голосов
/ 19 ноября 2018

Вы никогда не инициализировали текстовое поле

для любого объектно-ориентированного языка программирования вы не можете напрямую обращаться к классам, если они не статичны.

TextBox не является статическим классом. Я настоятельно рекомендую добавить текстовое поле в xaml, как это предлагается в комментариях. Если вы по каким-либо причинам не хотите этого делать, напишите

TextBox MyTextbox = new TextBox();
MyTextBox.Text  = "POINTS Counter";//Using this later on

и должно работать.

edit: однако, даже если ваша ошибка исчезнет, ​​вы не увидите текстовое поле, просто сделав это.

Чтобы сделать его видимым, вам необходимо сообщить об этом объекту-контейнеру. Я предполагаю, что вы используете какую-то сетку в своем коде xaml, который, вероятно, выглядит следующим образом:

<Window x:Class="Mytest.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:pigc="http://schemas.proleit.com/ic/GUI/Charts"
    xmlns:pic="http://schemas.proleit.com/ic/Core"
    xmlns:local="clr-namespace:Stanlytest"
    xmlns:graph="clr-namespace:Graph"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid>
<!- Whatever you do here -->

</Grid>

Теперь дайте вашей Grid имя, если у вас его нет (например, <Grid Name="MainGrid"> </Grid>), затем добавьте текстовое поле в качестве дочернего элемента к сетке в xaml.cs (например: MainGrid.Children.Add(MyTextBox).)

Я могу еще раз сообщить вам, что, хотя поначалу это немного незнакомо для новичков (я только недавно начал изучать wpf самостоятельно), вы должны добавить свои объекты в xaml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...