Suren97 Ответов: 1

C# как написать код для следующих и предыдущих кнопок в flowlayoutpanel


у меня есть кнопки страницы в flowlayoutpanel`1,2,3,4 и кнопки next и previous,если я нахожусь на второй странице и нажимаю на кнопку next, она будет перемещена на 3 страницы, а если я нажму на кнопку previous, она будет перемещена на 1 страницу.


Кто может мне помочь, я думаю,что должен объявить любую переменную сверху, например int index, а затем записать ее в мои следующие и предыдущие функции.

Что я уже пробовал:

Предложенный Филом о`


int currentPage;
int pageCount;

public Gallery()
       {
           InitializeComponent();
           for (int i = 1; i <= Controller.books.Count / 4 + 1; i++)
           {
               Button btn = new Button();
               btn.Text = i.ToString();
               flowLayoutPanel2.Controls.Add(btn);
               btn.Click += new EventHandler(show);
           }
       }


public void show(object sender, EventArgs e)
        {
            Button ays = sender as Button;
            int a = (int.Parse(ays.Text) - 1) * 4;
            int b = a + 4;
            this.Sharel(a, b);
        }


и мои следующие и предыдущие кнопки.

Button button = new Button();
           button.Text = "previous";
           flowLayoutPanel2.Controls.Add(button);
           button.Click += new EventHandler(prev);
           Button bt = new Button();
           bt.Text = "next";
           flowLayoutPanel2.Controls.Add(bt);
           bt.Click += new EventHandler(next);


 public void prev(object sender,EventArgs e)
        {
            int a = Math.Max(0, currentPage - 1); 
            int b = Math.Min(pageCount, a + 4);   
            Sharel(a, b);
        }
public void next(object sender, EventArgs e)
        {
           int a = Math.Min(pageCount, currentPage + 1);        
            int b = Math.Min(pageCount, a + 4);           
            Sharel(a, b);
        }


public void Sharel(int start = 0, int end = 0)
       {
           currentPage = start;
           flowLayoutPanel1.Controls.Clear();
           for (int i = start; i < end; i++)
           {
               if (i >= Controller.books.Count)
               {
                   break;
               }
               if (end == 0)
               {
                   end = Controller.books.Count;
               }
               Book item = Controller.books[i];
               FlowLayoutPanel flp = new FlowLayoutPanel();
               flp.BackColor = Color.PaleGoldenrod;
               flp.AutoSize = true;
               flp.MinimumSize = new Size(10, 100);
               Label lb = new Label();
               lb.Text = "Title: " + item.title + "\n" + "Autor: " + item.author + "\n" + "Count: " + item.count + "\n" + "Price: " + item.price;
               lb.ForeColor = Color.Black;
               lb.AutoSize = true;
               flp.Controls.Add(lb);
               if (item.image != String.Empty)
               {
                   PictureBox pb = new PictureBox();
                   pb.Location = new Point(20, 80);
                   pb.Image = Image.FromFile("Nkarners/" + item.image);
                   pb.SizeMode = PictureBoxSizeMode.StretchImage;
                   flp.Controls.Add(pb);
               }
               Button bt = new Button();
               bt.Location = new Point(30, 30);
               bt.MinimumSize = new Size(10, 40);
               bt.Text = "Delete";
               flp.Controls.Add(bt);
               bt.Click += new EventHandler(delete);
               flowLayoutPanel1.Controls.Add(flp);
               bt.Tag = item.id.ToString();
               Button b = new Button();
               b.AutoSize = true;
               b.MinimumSize = new Size(10, 40);
               b.Text = "Edit";
               flp.Controls.Add(b);
               b.Click += new EventHandler(edit);
               b.Tag = item.id.ToString();
               button2.Tag = b.Tag;
               Button button = new Button();
               button.AutoSize = true;
               button.MinimumSize = new Size(10, 40);
               button.Text = "Order";
               flp.Controls.Add(button);
               button.Click += new EventHandler(order);
               button.Tag = item.id.ToString();

           }
       }

phil.o

Единственный класс FlowLayoutPanel, который я нашел, находится в System.Окна.Пространство имен Forms и, похоже, не подходит для отображения страниц. Может ли быть так, что вам нужен TabControl вместо этого?

Suren97

нет, мне нужна flowlayoutpanel, мои страницы работают, например,когда я нажимаю на кнопку 1 страница, она показывает мне данные 1 страницы, когда я нажимаю на кнопку 2 Страница, она показывает мне данные 2 страницы и так далее.Теперь мне нужно добавить кнопки prev и next

phil.o

Затем, возможно, показ кода, который выполняется, когда вы нажимаете на кнопку 1, например, поможет нам понять, как помочь вам :)

Suren97

Я написал код страниц`1,2,3,4,5 и так далее, на каждой странице есть 4 данных,например, если у меня есть 10 данных, то это будет 3 страницы`4+4+2, мне просто нужно написать функцию для кнопок prev и next.я должен сказать, что когда я нажимаю на кнопку next или предыдущую, она будет перемещена на следующую страницу или предыдущую.

phil.o

Более конкретно, не могли бы вы показать нам код в Sharel(int a, int b) метод, пожалуйста?

Suren97

да, конечно, я добавлю это в свой вопрос сейчас

Suren97

я обновил, можете посмотреть

1 Ответов

Рейтинг:
0

phil.o

Хорошо, то, как все организовано, Sharel отображает 4 страницы.
Есть несколько вещей, которые вам нужны:
- во-первых, вам нужен способ запомнить, какая страница на самом деле отображается. Поскольку существующие кнопки имеют дело со статическими значениями, вы используете эти значения в качестве start параметр. Но, с previous и next кнопки, у вас нет статических данных; вам нужно значение, чтобы компилятор знал, с какой предыдущей или следующей страницей иметь дело.
Вы можете добавить закрытую переменную-член в свою форму, что-то вроде

int currentPage;

- во-вторых, когда вы создаете эту переменную-член, Вы должны затем повлиять на нее полезное значение, когда страница фактически отображается. Например, вы можете добавить:
currentPage = start;
где-то в середине Sharel метод.
- наконец, отсюда вы ахев фактическое значение, которое вы можете использовать в next и previous методы. Но вы также должны позаботиться о крайних случаях, когда вы показываете первую и последнюю страницы. Для первой страницы это просто, так как ее индекс равен нулю. Для последней страницы, опять же, вам нужен способ иметь фактическое, допустимое значение для количества страниц, которые вы фактически отображаете. Это можно было бы объявить так
int pageCount;
Вы должны будете дать ему значимое значение самостоятельно, в то время как вы загружаете страницы в элементе управления; потому что вы сможете получить это значение в то время. Тогда вы могли бы написать методы таким образом:
public void prev(object sender,EventArgs e)
{
   int a = Math.Max(0, currentPage - 1); // Lower limit of start to zero
   int b = Math.Min(pageCount, a + 4);   // Upper limit of end to page count
   Sharel(a, b);
}

public void next(object sender, EventArgs e)
{
   int a = Math.Min(pageCount, currentPage + 1); // Upper limit of start
                                                 // to page count
   int b = Math.Min(pageCount, a + 4);           // Upper limit of end
                                                 // to page count
   Sharel(a, b);
}


Suren97

Но мне нужно также создать подобное в функции`
Кнопка prev = отправитель как кнопка;

phil.o

Почему? Есть ли две кнопки в глокальном пространстве, или у вас есть две предыдущие и следующие кнопки на каждой странице?

Suren97

как я могу отправить вам фотографию?

phil.o

Вы не можете, извините.

Suren97

разве у тебя нет ФБ?

phil.o

Есть ли у меня fb или нет-это не вопрос; я бы никогда не принял ни одного файла от кого-то на публичном форуме. И ты тоже не должен.

Suren97

Где я должен написать currentPage = start?

phil.o

В первых числах метод Шарел бы возможность.
Вы сами написали какой-нибудь код или просто скопировали его откуда-то? Потому что у меня такое чувство, что вы не имеете ни малейшего представления о том, как этот код выполняет свою работу...

Suren97

я написал его сам, но предложенный вами код не работает

Ralf Meier

Покажите код, в котором вы пытались реализовать то, что предложил вам Фил.о.
Если вы поняли это так, как предлагает (Фил), это должно сработать ...

Suren97

Хорошо, вы можете посмотреть, я обновил его, что предложил Фил.о.

Ralf Meier

Переменная Currentpage должна быть определена вне методов.
Также вы показываете присвоить здесь значение страницы, которая в данный момент отображается - я предполагаю, что в данный момент присвоение не является правильным.
Но... вы написали, что внушение не работает - так что же происходит в точности ?

Suren97

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

Ralf Meier

ОК... потому что я не сижу рядом с тобой :
Если вы зададите точку останова в Sharel-методе в самом начале - какие значения вы получите для 'a' и 'b' ?
2-й вопрос : чтобы заставить его работать - какие значения вы записываете вручную в "А" и "в" ?

Suren97

начало и конец

phil.o

Там вы должны использовать свой отладчик :)
Знаете ли вы, что такое отладчик, для чего он нужен и как его использовать?

Suren97

нет , я не знаю, в чем дело?

phil.o

Хорошо, это очень распространенный вопрос, на который форум быстрых ответов CP уже дал очень хорошие ответы.
Вот ссылка на решение @ppolymorphe, которое предоставит вам некоторые ссылки, чтобы понять, для чего нужна отладка и как это можно сделать. Не сосредотачивайтесь на вопросе, на который дан ответ, просто прочтите ту часть решения 3, которая начинается с С тех пор как спорил с компьютерами....
Действительно, сделайте это; отладка далеко не обязательна, если вы хотите добиться прогресса в области разработки. Вы можете даже наслаждаться этим, поскольку это позволяет вам иметь глубокое восприятие того, что происходит под капюшонами.
Решение 3

Suren97

Огромное спасибо)))

phil.o

Добро пожаловать.

Ralf Meier

@Phil: большой палец вверх ... ;)

phil.o

Спасибо :)