form_submit() and form_validate() doesn't work for tableselect I'm trying to create sort of slider that slides the user selected blocks. to do so I need to list all of the blocks and let the user to select them, I used tableselect. this is my MODULE.module

function deckslider_permission() {
return array(
        'administer deckslider' =&gt; array(
                'title' =&gt; t('Administer deckslider module'),
                'description' =&gt; t('Perform administration tasks for Trails module.'),
        ),
);
}

function deckslider_menu() {
$items['admin/config/deckslider'] = array(
        'title' =&gt; 'Deck Slider',
        'description' =&gt; 'deckslider configuration',
        'page callback' =&gt; 'drupal_get_form',
        'page arguments' =&gt; array('deckslider_admin_settings'),
        'access arguments' =&gt; array('administer deckslider'),
        'file' =&gt; 'deckslider.admin.inc',
        'file path' =&gt; drupal_get_path('module', 'deckslider'),
);
return $items;
}

function select_blocks_submit(&amp;$form, &amp;$form_state, $form_id) {
dsm("Hello");
print "Hello";
}

function deckslider_form_select_blocks_alter(){
    $form['#submit'][]='my_submit';
}

function my_submit(){
    dsm("Hello");
    print "d";
}


and it is deckslider.admin.inc:

function deckslider_admin_settings() {
    global $theme;
    $blocks = _block_rehash($theme);
    $header = array(
        'title' =&gt; t('Block'), 
    );

    $options = array();
    for ($i = 0 ; $i &lt; count($blocks) ; $i++){
        $options[] = array('title' =&gt; t($blocks[$i]['info']));
    }

    $form['select_blocks'] = array(
        '#type' =&gt; "tableselect",
        '#header' =&gt; $header,
        '#options' =&gt; $options,
        '#multiple' =&gt; TRUE,
    );
    return system_settings_form($form);
}


The problem is the form has a default save configuration button and I can't trigger any function for its submission. this is the output
You either need to change the name of the submit handler so it matches Drupal's naming convention of FORM_FUNCTION_submit, e.g.

function deckslider_admin_settings_submit(&amp;$form, &amp;$form_state, $form_id) {
  dsm("Hello");
}


Or add the handler manually in your form function:

function deckslider_admin_settings($form, &amp;$form_state) {
    global $theme;
    $blocks = _block_rehash($theme);
    $header = array(
        'title' =&gt; t('Block'), 
    );

    $options = array();
    for ($i = 0 ; $i &lt; count($blocks) ; $i++){
        $options[] = array('title' =&gt; t($blocks[$i]['info']));
    }

    $form['select_blocks'] = array(
        '#type' =&gt; "tableselect",
        '#header' =&gt; $header,
        '#options' =&gt; $options,
        '#multiple' =&gt; TRUE,
    );

    $form['#submit'][] = 'select_blocks_submit';

    return system_settings_form($form);
}