Как я заставляю индикатор выполнения winforms переместиться вертикально в C#?

Ваш код, кажется, предполагает, что запуск транзакций дает вам блокировку местоположения, но это не так, как работают транзакции в Firebase. Вместо этого транзакции в Firebase работают с логикой сравнения и установки: клиент сообщает вам, каково (по его мнению) текущее значение, и вы сообщаете ему, что в этом случае становится новым значением, возвращая это новое значение.

Таким образом, вместо того, чтобы звонить .setValue(s) на месте, вы должны вернуть s в MutableData:

dbRef.child(String.valueOf(selectedDate.getTime())).runTransaction(new Transaction.Handler() {
    @Override
    public Transaction.Result doTransaction(MutableData mutableData) {
        BookingSlot s = mutableData.getValue(BookingSlot.class);
        if (s == null) {
            mutableData.setValue(uid); // TODO: pass in the UID of the user who's claiming this slot
            return Transaction.success(mutableData);
        } else {
            Toast.makeText(BookingActivity.this,"Slot has just been booked!",Toast.LENGTH_LONG).show();
            return Transaction.abort();
        }
    }

    @Override
    public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
        Log.e("Booking", "postTransaction:onComplete:" + databaseError);
    }
});

С помощью приведенного выше кода клиенты не будут перезаписывать каждый другие ценят.

Но с Firebase вы всегда должны учитывать, что злоумышленник может написать свой собственный код для вашей базы данных, поскольку он может найти данные конфигурации в APK вашего приложения. Поэтому в правилах безопасности Firebase на стороне сервера вы также должны указывать, что на каждый слот можно претендовать только один раз.

Если заказы хранятся в соответствии с /bookings, это можно сделать с помощью чего-то вроде:

{
  "rules": {
    "bookings": {
      "$timeslot": {
        ".write": "data.val() === null || data.val() === auth.uid"
      }
    }
  }
}

Это позволяет производить запись, если либо еще нет значения (слот не имеет было заявлено), или если пользователь пишет тот, кто требовал слот ранее (что позволило бы им очистить слот).

6
задан Jimi 14 December 2018 в 01:03
поделиться

2 ответа

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

Индикатор выполнения не предназначен для взятия входа, независимо от того, что ориентация.

Если действительно требуется управлять объемом, рассмотрите использование вертикальной полосы прокрутки или ползунка с вертикальной ориентацией.

Если это имеет значение существует обсуждение того, как создать вертикальный индикатор выполнения на MSDN, где они предлагают делать это:

using System; 
using System.Windows.Forms; 

public class VerticalProgressBar : ProgressBar { 
  protected override CreateParams CreateParams { 
    get { 
      CreateParams cp = base.CreateParams; 
      cp.Style |= 0x04; 
      return cp; 
    } 
  } 
}

который устанавливает PBS_VERTICAL флаг в Style.

18
ответ дан 8 December 2019 в 04:56
поделиться

Необходимо использовать ProgressBarRenderer для этого. Это документируется в MSDN

Документация на самом деле показывает реализацию вертикального ProgressBar, таким образом, это должно помочь Вам.:-)

6
ответ дан 8 December 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: